When developing a Node.js application using Express.js, structuring your codebase effectively is crucial for maintainability, scalability, and ease...
For further actions, you may consider blocking this person and/or reporting abuse
While the micro scheme is fine, it lacks a proper repository structuring.
As an example, not aggregating the source code in a
srcdirectory is a huge misstep. You might want to use TypeScript or some other tooling (e.g., a bundler) to process your code for performance benefits. As such putting everything into the root / mixing with your tooling and tests is something you want to avoid strongly.(You should not use CommonJS - use ESModules; especially if you really care about "maintainability, scalability, and collaboration".)
if i want to convert the javascript application in ES module to a desktop application using electronjs, how do i do it?
Electron.js understands ESM (electronjs.org/docs/latest/tutoria...) - but if you want to only use ESM in development and another format (e.g., CommonJS) at runtime I recommend using a tool such as esbuild (which can bundle and transform).
Thanks for the new insight.
using tools like Electron Packager or Electron Builder.
you are wrong since the moment you want to put types to a non typed language, if want types go and do you stuff in c# or java
I have always had a bit of a problem with this type of folder structure. I don't understand how you can modularize your code with it. You have, at the root of source directory, the typical controllers, services, repositories (application, domain and data layers) folders and inside those you have similarly named files and classes, like "customer" or "product". While the controller, the service and the repository for "customer" belong together, they aren't close to each other, so it's harder to make that connection.
I always considered it better to have a
modules/folder inside which I have thecustomerandproductand inside those folders have layers likecontrollers/,services/,views/andpersistence/orrepositories/etc. This way I can easily focus on working inside one module, and if I need to, I can easily separate it to it's own service.A tip there is to use DDD, so that you create modules based on the bounded contexts and you can easily create microservices based on those bounded contexts. Yeah, you will have more nested folders, but you still have a more clear grouping and separating them later (if needed) is much less painful.
horrible i hate it its dumb
Very good article 💯. Structuring projects is a more difficult task than it seems because we have to think about possible developments and how they can be accommodated in the least painful way possible.
If you allow me, I would just like to make a suggestion for improvement.
The regex used to validate email is vulnerable to ReDos (Regex Denial Of Service). It would be interesting to perhaps try to replace it with another one in the article so that other people who come to read the article don't end up using this regex to validate data in real systems.
Here's a tip for readers, always validate your regex before using.
I generally use this site to check if a regex is vulnerable: devina.io/redos-checker
Once again congratulations on the article 😃
Thanks!
The code looks well organized and readable
Thanks!
Thanks for this amazing writeup, Vishal. ❤️ed it!
It'll be great if you can share a sample GitHub repo for referencing a similar project structure. Would be a great addition as a reference material.
That said, I recently came up with a backend microservice template using JavaScript, Node.js, and Express.js. Although incomplete, it's quite practical and can be used to build reliable backend services. In my template though I've taken inspiration from NestJS for their modular approach to the directory structure.
Your blog though is a great reference for me to build another template, one that corresponds to the more common way of organizing the project, the way you've portrayed here.
So again, thanks! 💯
Thanks, bro means lot
Not going to lie this directory structure is archaic and for beginners who are new to expressjs. There is are far more approachable and preferable ways to structure an expressjs app, most especially when working with typescript at the backend.
Well, i came across this article through daily.dev and gosh it helps me a lot, because i'm in the middle of structuring my backend in an important project. I tried structuring based on this -> github.com/goldbergyoni/nodebestpr...
Now i realize, @vyan article is what i need to go on.
Thanks for sharing.
Good article for beginners.
Good job this is well done. I think for me as a beginner it's the principle. whichever approach one choses it must satisfy the principle of separation of concerns. For those criticizing I think it would be best to support your claim with a well organized and concise alternative as this presented herein rather than hate and throw things here and there. Once again good job @vyan 🇰🇪
It might have been better to dive into one of the popular start kits and explore why they are structured that way.
But this is a good one nonetheless!
Thanks!
Can you share the links for those popular start kits?
Yeah
I request to you if possible then create GitHub repo for us. that more help to beginner like me.
Yes , I will create!
thank you...
Nice insights!! @vyan
Thanks!
We have the
Basic Nodejs structure ,
Express Nodejs structure,
microservices Nodejs structure,
Typescript Nodejs structure.
What we have here is the basic Nodejs structure, and it good for all beginners and intermediate developers.
As a developer, you just need to start with the basic structure, and as the application begins to scale, you can choose any of the advanced structures.
It's a problem-solving and He has done a great work. 👍
Thanks for the guide, as a beginner ejs coder, I deployed my first website to be used by my coding learner group. Will help rewrite and organize.
Welcome!
Thank you very much for another insightful and important article!
Welcome!
Thanks for posting Vishal , infact i am also following somewhat like this structure only and believe me it helps a lot and make it less complex for the devs to understand stuff.
Welcome buddy!
thanks for all the information :) huge hug from Iran .
hi
I think this is fine also but better folder structure might be module based. This is easier to maintain and structure.
Yes
better using per services area
i've been preferring grouping related items to the point where i can copy the posts route directory into another project and it would mostly work
So far so good (-:. You can add repository later for your queries and create entities for your business logic.
Oh, Thanks, This is what I was waiting for ⭐
Cool
DDD hex
Nice work here
Thanks!
I prefer modular setup. Makes it easier to scale up or down by attaching or detaching modules
Cool!
Nice Explaination.
Thanks!
Very usefull! Thank you for writing this
Nice!
Thank you for this. I believe well structured code will save me from a lot of headache
Welcome!
Yoooooo
Please share GitHub repo.
I did not created GitHub for this!
if I use express generator do I have to put it in the src folder?
I really like this post. Let's connect
Yes , you can see my social handle on my profile!
why don't you put it in the src folder
Because , I see most people use this way only, You can put your code in src , it will be more structured.