The structure of nodejs project is influenced by the private preferences, project’s architecture and module injection strategy getting used .Also on event based arc’ which uses dynamic module instantiation mechanism.
To have a MVC structure it’s imperative to filter the server side and client side ASCII text file because the client side code will probably be minimized and sent to browser and is public in its basic nature.
And the server side or backend will provide API to perform CRUD operations.
A simple nodejs application with MVC and API
The first major distinction is between the dynamically generated directories which will be used for hosting and source directories.
The source directories will have a config file or folder depending on the amount of configuration you may have.This includes the environment configuration and business logic configuration which you’ll choose to put inside config directory.
|-- Config |-- config.json |-- appConfig |-- pets.config |-- payment.config
Now the foremost vital directories where we distinguish between the server side/backend and therefore the frontend modules .
The 2 directories server and webapp represent the backend and frontend respectively which we can prefer to put inside a source directory viz. src.Inside the server directory you’ll have the controller ,the App.js/index.js which can be you main nodejs file and start point .
The server dir. can also have the dto dir which holds all the info transfer objects which can be usd by API controllers.
|-- server |-- dto |-- pet.js |-- payment.js |-- controller |-- PetsController.js |-- PaymentController.js |-- App.js
The webapp directory are often divided into two major parts public and mvc , this is often again influenced by what build strategy you want to use. We are using browserfiy the build the MVC a part of webapp and minimize the contents from mvc directory simply put.
|-- webapp |-- public |-- mvc
Now the public directory can contain all the static resources,images,css(you can have saas files as well) and most importantly the HTML files .
-- public |-- build // will contianed minified scripts(mvc) |-- images |-- mouse.jpg |-- cat.jpg |-- styles |-- style.css |-- views |-- petStore.html |-- paymentGateway.html |-- header.html |-- footer.html |-- index.html
The mvc directory will contain the front-end logic including the models,the view controllers and any other utils modules you may need as part of UI. Also the index.js or shell.js whichever may suite you is part of this directory as well .
|-- mvc |-- controllers |-- Dashborad.js |-- Help.js |-- Login.js |-- utils |-- index.js
So in conclusion the entire project structure will look like below.And a simple build task like gulp browserify will minify the mvc scripts and publish in public directory.
We can then provide this public directory as static resource via express.use(satic(‘public’ )) api.
|-- node_modules |-- src |-- server |-- controller |-- App.js // node app |-- webapp |-- public |-- styles |-- images |-- index.html |-- mvc |-- controller |-- shell.js // mvc shell |-- config |-- Readme.md |-- .gitignore |-- package.json
If you like this post, don’t forget to share 🙂