1. Environment settings
- B1 : Create a project directory
- B2 : Create package.json file – a file that manages dependencies installed locally. To create the package.json file, we need to initialize npm12npm init
- B3 : Express installation
- Express is a commonly used module included with Node.js. Express runs between the server created by Node.js and the frontend pages of a web application. Express also solves application routing, directing users to the right page based on user interaction with the application.
- Although there are many options other than express, Express is the easiest to learn about the interaction between the Node.js and frondend backend.
- Install express
12npm install express --save - B4 : Create the app.js file in the project directory12345678910111213141516<span class="token comment">// Call in installed dependencies</span><span class="token keyword">const</span> express <span class="token operator">=</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">'express'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span><span class="token comment">// set up express app</span><span class="token keyword">const</span> app <span class="token operator">=</span> <span class="token function">express</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span><span class="token comment">// set up port number</span><span class="token keyword">const</span> port <span class="token operator">=</span> <span class="token number">5035</span> <span class="token punctuation">;</span><span class="token comment">// set up home route</span>app <span class="token punctuation">.</span> <span class="token keyword">get</span> <span class="token punctuation">(</span> <span class="token string">'/'</span> <span class="token punctuation">,</span> <span class="token punctuation">(</span> request <span class="token punctuation">,</span> respond <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>respond <span class="token punctuation">.</span> <span class="token function">status</span> <span class="token punctuation">(</span> <span class="token number">200</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">json</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span>message <span class="token punctuation">:</span> <span class="token string">'Welcome to Project Support'</span> <span class="token punctuation">,</span><span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span><span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span>app <span class="token punctuation">.</span> <span class="token function">listen</span> <span class="token punctuation">(</span> port <span class="token punctuation">,</span> <span class="token punctuation">(</span> request <span class="token punctuation">,</span> respond <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token string">`Our server is live on </span> <span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> port <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token string">. Yay!`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">;</span><span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span>
- B5 : Start server12node app <span class="token punctuation">.</span> js
2. Building applications
In this article, we will build a CRUD Course application (add and edit courses)
1. Directory structure
- You probably already know about the MVC model, in this example we will also build the application in the MVC model by separating the structure into separate parts depending on its function.
- We will create 3 directories, models will contain code that interacts with the database, the controllsers directory contains the application’s logic that handles requests from clients and responses, and the route directory handles navigation.1234567// create new directorymkdir server// change to server directorycd server// add three more directoriesmkdir controllers models routes
2. Configure Application Entry Point (File app.js)
- Install the dependencies123// npm install the needed dependenciesnpm install body-parser morgan mongoose --save
- body-parser : To handle HTTP POST requests in express.js from version 4 and above, we need the body-parser middleware. The body parser extracts the entire body of incoming requests and displays them on req.body
- mongoose : is an ODM (Object Data Modeling) library for MongDB and Node.js, which is used to convert objects (objects) in code into representations of these objects in MongoDB.
- morgan : is a great logging tool when working with HTTP server in Node.js, is a middleware that allows us to easily log requests and errors to the console.
- Import and set up dependencies123456789101112<span class="token comment">// import dependencies</span><span class="token keyword">import</span> express <span class="token keyword">from</span> <span class="token string">'express'</span> <span class="token punctuation">;</span><span class="token keyword">import</span> bodyParser <span class="token keyword">from</span> <span class="token string">'body-parser'</span> <span class="token punctuation">;</span><span class="token keyword">import</span> mongoose <span class="token keyword">from</span> <span class="token string">'mongoose'</span> <span class="token punctuation">;</span><span class="token keyword">import</span> logger <span class="token keyword">from</span> <span class="token string">'morgan'</span> <span class="token punctuation">;</span><span class="token comment">// set up dependencies</span><span class="token keyword">const</span> app <span class="token operator">=</span> <span class="token function">express</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span>app <span class="token punctuation">.</span> <span class="token function">use</span> <span class="token punctuation">(</span> bodyParser <span class="token punctuation">.</span> <span class="token function">json</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span>app <span class="token punctuation">.</span> <span class="token function">use</span> <span class="token punctuation">(</span> bodyParser <span class="token punctuation">.</span> <span class="token function">urlencoded</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> extended <span class="token punctuation">:</span> <span class="token boolean">false</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span>app <span class="token punctuation">.</span> <span class="token function">use</span> <span class="token punctuation">(</span> <span class="token function">logger</span> <span class="token punctuation">(</span> <span class="token string">'dev'</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span>
- Set up mongoose: Use JavaScript promise to set up mongoose and catch errors.123456789<span class="token comment">// set up mongoose</span>mongoose <span class="token punctuation">.</span> <span class="token function">connect</span> <span class="token punctuation">(</span> <span class="token operator"><</span> Your <span class="token constant">URI</span> <span class="token operator">></span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> useNewUrlParser <span class="token punctuation">:</span> <span class="token boolean">true</span> <span class="token punctuation">,</span> useUnifiedTopology <span class="token punctuation">:</span> <span class="token boolean">true</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span><span class="token punctuation">.</span> <span class="token function">then</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">'Database connected'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span><span class="token punctuation">}</span> <span class="token punctuation">)</span><span class="token punctuation">.</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> error <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">'Error connecting to database'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span><span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span>
Note:- Best practice is to set the URI in .env and access the environment variables in the env file with process.env.VAR_NAME
- You can install MongoDB on your computer or you can use the MongoDB Atlas cloud. To set up MongoDB Atlas and get the URI for your Database, you can refer to the instructions
- Set up port, define route home and listen for port123456789101112<span class="token comment">// set up port</span><span class="token keyword">const</span> port <span class="token operator">=</span> <span class="token number">5035</span> <span class="token punctuation">;</span><span class="token comment">// set up route</span>app <span class="token punctuation">.</span> <span class="token keyword">get</span> <span class="token punctuation">(</span> <span class="token string">'/'</span> <span class="token punctuation">,</span> <span class="token punctuation">(</span> req <span class="token punctuation">,</span> res <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>res <span class="token punctuation">.</span> <span class="token function">status</span> <span class="token punctuation">(</span> <span class="token number">200</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">json</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span>message <span class="token punctuation">:</span> <span class="token string">'Welcome to Project with Nodejs Express and MongoDB'</span> <span class="token punctuation">,</span><span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span><span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span>app <span class="token punctuation">.</span> <span class="token function">listen</span> <span class="token punctuation">(</span> port <span class="token punctuation">,</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token string">`Our server is running on port </span> <span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> port <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token string">`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">;</span><span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span>
- Start server: Open the terminal, in the project directory, run:12node app.js
Results of connecting the database successfully and running the application at port 5035:
3. Create Model
- First we will go into the example of creating Caurse. The application allows you to enter titles and descriptions for the created courses and courses that will be saved in MongoDB so that the client can access them when needed. The first model we create will be course.js in the models directory.
- File course.js: First we import mongoose and define a schema123456789101112131415161718<span class="token keyword">import</span> mongoose <span class="token keyword">from</span> <span class="token string">'mongoose'</span> <span class="token punctuation">;</span>mongoose <span class="token punctuation">.</span> Promise <span class="token operator">=</span> global <span class="token punctuation">.</span> Promise <span class="token punctuation">;</span><span class="token keyword">const</span> courseSchema <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">mongoose <span class="token punctuation">.</span> Schema</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span>_id <span class="token punctuation">:</span> mongoose <span class="token punctuation">.</span> Schema <span class="token punctuation">.</span> Types <span class="token punctuation">.</span> ObjectId <span class="token punctuation">,</span>title <span class="token punctuation">:</span> <span class="token punctuation">{</span>type <span class="token punctuation">:</span> String <span class="token punctuation">,</span>required <span class="token punctuation">:</span> <span class="token boolean">true</span> <span class="token punctuation">,</span><span class="token punctuation">}</span> <span class="token punctuation">,</span>description <span class="token punctuation">:</span> <span class="token punctuation">{</span>type <span class="token punctuation">:</span> String <span class="token punctuation">,</span>required <span class="token punctuation">:</span> <span class="token boolean">true</span> <span class="token punctuation">,</span><span class="token punctuation">}</span> <span class="token punctuation">,</span><span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span><span class="token keyword">export</span> <span class="token keyword">default</span> mongoose <span class="token punctuation">.</span> <span class="token function">model</span> <span class="token punctuation">(</span> <span class="token string">'Course'</span> <span class="token punctuation">,</span> courseSchema <span class="token punctuation">)</span> <span class="token punctuation">;</span>
4. Create Controller
- Create a course.js file in the controllers directory
- Import mongoose and model course that we export when creating the model course.123<span class="token keyword">import</span> mongoose <span class="token keyword">from</span> <span class="token string">'mongoose'</span> <span class="token punctuation">;</span><span class="token keyword">import</span> Course <span class="token keyword">from</span> <span class="token string">'../models/course'</span> <span class="token punctuation">;</span>
- Create a course: First we create a Course with the value corresponding to the keys in the courseSchema. Use the save () method of mongoDB to save data to the database. Return a promise that will return the response to the client if the save is successful and handle the error if an error occurs.123456789101112131415161718192021222324252627<span class="token comment">// create new cause</span><span class="token keyword">export</span> <span class="token keyword">function</span> <span class="token function">createCourse</span> <span class="token punctuation">(</span> req <span class="token punctuation">,</span> res <span class="token punctuation">)</span> <span class="token punctuation">{</span><span class="token keyword">const</span> course <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Course</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span>_id <span class="token punctuation">:</span> mongoose <span class="token punctuation">.</span> Types <span class="token punctuation">.</span> <span class="token function">ObjectId</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span>title <span class="token punctuation">:</span> req <span class="token punctuation">.</span> body <span class="token punctuation">.</span> title <span class="token punctuation">,</span>description <span class="token punctuation">:</span> req <span class="token punctuation">.</span> body <span class="token punctuation">.</span> description <span class="token punctuation">,</span><span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span><span class="token keyword">return</span> course<span class="token punctuation">.</span> <span class="token function">save</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span><span class="token punctuation">.</span> <span class="token function">then</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> newCourse <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span><span class="token keyword">return</span> res <span class="token punctuation">.</span> <span class="token function">status</span> <span class="token punctuation">(</span> <span class="token number">201</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">json</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span>success <span class="token punctuation">:</span> <span class="token boolean">true</span> <span class="token punctuation">,</span>message <span class="token punctuation">:</span> <span class="token string">'New cause created successfully'</span> <span class="token punctuation">,</span>Course <span class="token punctuation">:</span> newCourse <span class="token punctuation">,</span><span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span><span class="token punctuation">}</span> <span class="token punctuation">)</span><span class="token punctuation">.</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> error <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> error <span class="token punctuation">)</span> <span class="token punctuation">;</span>res <span class="token punctuation">.</span> <span class="token function">status</span> <span class="token punctuation">(</span> <span class="token number">500</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">json</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span>success <span class="token punctuation">:</span> <span class="token boolean">false</span> <span class="token punctuation">,</span>message <span class="token punctuation">:</span> <span class="token string">'Server error. Please try again.'</span> <span class="token punctuation">,</span>error <span class="token punctuation">:</span> error <span class="token punctuation">.</span> message <span class="token punctuation">,</span><span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span><span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span><span class="token punctuation">}</span>
5. Create route
- Create main.js file in routes routes.12345678<span class="token keyword">import</span> express <span class="token keyword">from</span> <span class="token string">'express'</span> <span class="token punctuation">;</span><span class="token keyword">import</span> <span class="token punctuation">{</span> createCourse <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'../controllers/course'</span> <span class="token punctuation">;</span><span class="token keyword">const</span> router <span class="token operator">=</span> express <span class="token punctuation">.</span> <span class="token function">Router</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span>router <span class="token punctuation">.</span> <span class="token function">post</span> <span class="token punctuation">(</span> <span class="token string">'/courses'</span> <span class="token punctuation">,</span> createCourse <span class="token punctuation">)</span> <span class="token punctuation">;</span><span class="token keyword">export</span> <span class="token keyword">default</span> router <span class="token punctuation">;</span>
Note : Import express and createCourse from the controller
- In the app.js fileWe import the route from the main.js file in the route directory. Set up the route with api prefix123456789<span class="token comment">// call in the installed dependencies</span><span class="token operator">...</span><span class="token keyword">import</span> logger <span class="token keyword">from</span> <span class="token string">'morgan'</span> <span class="token punctuation">;</span><span class="token keyword">import</span> mainRoutes <span class="token keyword">from</span> <span class="token string">'./server/routes/main'</span> <span class="token punctuation">;</span><span class="token operator">...</span><span class="token comment">// set up route</span>app <span class="token punctuation">.</span> <span class="token function">use</span> <span class="token punctuation">(</span> <span class="token string">'/api/'</span> <span class="token punctuation">,</span> mainRoutes <span class="token punctuation">)</span> <span class="token punctuation">;</span><span class="token operator">...</span>
6. Testing with Postman
So we have successfully created a new course and saved it into MongoDB.
7. Get list of courses
1. Controller
- The course.js file is in the controllers directory1234567891011121314151617181920<span class="token comment">// Get all course</span><span class="token keyword">export</span> <span class="token keyword">function</span> <span class="token function">getAllCourse</span> <span class="token punctuation">(</span> req <span class="token punctuation">,</span> res <span class="token punctuation">)</span> <span class="token punctuation">{</span>Course <span class="token punctuation">.</span> <span class="token function">find</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span><span class="token punctuation">.</span> <span class="token function">select</span> <span class="token punctuation">(</span> <span class="token string">'_id title description'</span> <span class="token punctuation">)</span><span class="token punctuation">.</span> <span class="token function">then</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> allCourse <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span><span class="token keyword">return</span> res <span class="token punctuation">.</span> <span class="token function">status</span> <span class="token punctuation">(</span> <span class="token number">200</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">json</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span>success <span class="token punctuation">:</span> <span class="token boolean">true</span> <span class="token punctuation">,</span>message <span class="token punctuation">:</span> <span class="token string">'A list of all course'</span> <span class="token punctuation">,</span>Course <span class="token punctuation">:</span> allCourse <span class="token punctuation">,</span><span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span><span class="token punctuation">}</span> <span class="token punctuation">)</span><span class="token punctuation">.</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> err <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>res <span class="token punctuation">.</span> <span class="token function">status</span> <span class="token punctuation">(</span> <span class="token number">500</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">json</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span>success <span class="token punctuation">:</span> <span class="token boolean">false</span> <span class="token punctuation">,</span>message <span class="token punctuation">:</span> <span class="token string">'Server error. Please try again.'</span> <span class="token punctuation">,</span>error <span class="token punctuation">:</span> err <span class="token punctuation">.</span> message <span class="token punctuation">,</span><span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span><span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span><span class="token punctuation">}</span>
2. Route
- The main.js file is in the route directory1234<span class="token keyword">import</span> <span class="token punctuation">{</span> createCourse <span class="token punctuation">,</span> getAllCourse <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'../controllers/course'</span> <span class="token punctuation">;</span><span class="token operator">...</span>router <span class="token punctuation">.</span> <span class="token keyword">get</span> <span class="token punctuation">(</span> <span class="token string">'/courses'</span> <span class="token punctuation">,</span> getAllCourse <span class="token punctuation">)</span> <span class="token punctuation">;</span>
3. Result
8. Get single course
1. Controller
- The course.js file is in the controllers directory1234567891011121314151617181920<span class="token comment">// get single course</span><span class="token keyword">export</span> <span class="token keyword">function</span> <span class="token function">getSingleCourse</span> <span class="token punctuation">(</span> req <span class="token punctuation">,</span> res <span class="token punctuation">)</span> <span class="token punctuation">{</span><span class="token keyword">const</span> id <span class="token operator">=</span> req <span class="token punctuation">.</span> params <span class="token punctuation">.</span> courseId <span class="token punctuation">;</span>Course <span class="token punctuation">.</span> <span class="token function">findById</span> <span class="token punctuation">(</span> id <span class="token punctuation">)</span><span class="token punctuation">.</span> <span class="token function">then</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> singleCourse <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>res <span class="token punctuation">.</span> <span class="token function">status</span> <span class="token punctuation">(</span> <span class="token number">200</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">json</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span>success <span class="token punctuation">:</span> <span class="token boolean">true</span> <span class="token punctuation">,</span>message <span class="token punctuation">:</span> <span class="token template-string"><span class="token string">`More on </span> <span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> singleCourse <span class="token punctuation">.</span> title <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token string">`</span></span> <span class="token punctuation">,</span>Course <span class="token punctuation">:</span> singleCourse <span class="token punctuation">,</span><span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span><span class="token punctuation">}</span> <span class="token punctuation">)</span><span class="token punctuation">.</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> err <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>res <span class="token punctuation">.</span> <span class="token function">status</span> <span class="token punctuation">(</span> <span class="token number">500</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">json</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span>success <span class="token punctuation">:</span> <span class="token boolean">false</span> <span class="token punctuation">,</span>message <span class="token punctuation">:</span> <span class="token string">'This course does not exist'</span> <span class="token punctuation">,</span>error <span class="token punctuation">:</span> err <span class="token punctuation">.</span> message <span class="token punctuation">,</span><span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span><span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span><span class="token punctuation">}</span>
2. Route
- The main.js file is in the route directory1234<span class="token keyword">import</span> <span class="token punctuation">{</span> createCourse <span class="token punctuation">,</span> getAllCourse <span class="token punctuation">,</span> getSingleCourse <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'../controllers/course'</span> <span class="token punctuation">;</span><span class="token operator">...</span>router <span class="token punctuation">.</span> <span class="token keyword">get</span> <span class="token punctuation">(</span> <span class="token string">'/courses/:courseId'</span> <span class="token punctuation">,</span> getSingleCourse <span class="token punctuation">)</span> <span class="token punctuation">;</span>
3. Result
9. Update course
1. Controller
- The course.js file is in the controllers directory123456789101112131415161718192021<span class="token comment">// update course</span><span class="token keyword">export</span> <span class="token keyword">function</span> <span class="token function">updateCourse</span> <span class="token punctuation">(</span> req <span class="token punctuation">,</span> res <span class="token punctuation">)</span> <span class="token punctuation">{</span><span class="token keyword">const</span> id <span class="token operator">=</span> req <span class="token punctuation">.</span> params <span class="token punctuation">.</span> courseId <span class="token punctuation">;</span><span class="token keyword">const</span> updateObject <span class="token operator">=</span> req <span class="token punctuation">.</span> body <span class="token punctuation">;</span>Course <span class="token punctuation">.</span> <span class="token function">update</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> _id <span class="token punctuation">:</span> id <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> $ <span class="token keyword">set</span> <span class="token punctuation">:</span> updateObject <span class="token punctuation">}</span> <span class="token punctuation">)</span><span class="token punctuation">.</span> <span class="token function">exec</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span><span class="token punctuation">.</span> <span class="token function">then</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>res <span class="token punctuation">.</span> <span class="token function">status</span> <span class="token punctuation">(</span> <span class="token number">200</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">json</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span>success <span class="token punctuation">:</span> <span class="token boolean">true</span> <span class="token punctuation">,</span>message <span class="token punctuation">:</span> <span class="token string">'Course is updated'</span> <span class="token punctuation">,</span>updateCourse <span class="token punctuation">:</span> updateObject <span class="token punctuation">,</span><span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span><span class="token punctuation">}</span> <span class="token punctuation">)</span><span class="token punctuation">.</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> err <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>res <span class="token punctuation">.</span> <span class="token function">status</span> <span class="token punctuation">(</span> <span class="token number">500</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">json</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span>success <span class="token punctuation">:</span> <span class="token boolean">false</span> <span class="token punctuation">,</span>message <span class="token punctuation">:</span> <span class="token string">'Server error. Please try again.'</span><span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span><span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span><span class="token punctuation">}</span>
- Note: For the update of mongoDB we use the $ set operator
2. Route
- The main.js file is in the route directory1234<span class="token keyword">import</span> <span class="token punctuation">{</span> createCourse <span class="token punctuation">,</span> getAllCourse <span class="token punctuation">,</span> getSingleCourse <span class="token punctuation">,</span> updateCourse <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'../controllers/course'</span> <span class="token punctuation">;</span><span class="token operator">...</span>router <span class="token punctuation">.</span> <span class="token function">patch</span> <span class="token punctuation">(</span> <span class="token string">'/courses/:courseId'</span> <span class="token punctuation">,</span> updateCourse <span class="token punctuation">)</span> <span class="token punctuation">;</span>
3. Result
10. Delete course
1. Controller
- The course.js file is in the controllers directory12345678910111213<span class="token comment">// delete a course</span><span class="token keyword">export</span> <span class="token keyword">function</span> <span class="token function">deleteCourse</span> <span class="token punctuation">(</span> req <span class="token punctuation">,</span> res <span class="token punctuation">)</span> <span class="token punctuation">{</span><span class="token keyword">const</span> id <span class="token operator">=</span> req <span class="token punctuation">.</span> params <span class="token punctuation">.</span> courseId <span class="token punctuation">;</span>Course <span class="token punctuation">.</span> <span class="token function">findByIdAndRemove</span> <span class="token punctuation">(</span> id <span class="token punctuation">)</span><span class="token punctuation">.</span> <span class="token function">exec</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span><span class="token punctuation">.</span> <span class="token function">then</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token operator">=></span> res <span class="token punctuation">.</span> <span class="token function">status</span> <span class="token punctuation">(</span> <span class="token number">204</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">json</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span>success <span class="token punctuation">:</span> <span class="token boolean">true</span> <span class="token punctuation">,</span><span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">.</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> err <span class="token punctuation">)</span> <span class="token operator">=></span> res <span class="token punctuation">.</span> <span class="token function">status</span> <span class="token punctuation">(</span> <span class="token number">500</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">json</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span>success <span class="token punctuation">:</span> <span class="token boolean">false</span> <span class="token punctuation">,</span><span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span><span class="token punctuation">}</span>
- Note: For the update of mongoDB we use the $ set operator
2. Route
- The main.js file is in the route directory1234<span class="token keyword">import</span> <span class="token punctuation">{</span> createCourse <span class="token punctuation">,</span> getAllCourse <span class="token punctuation">,</span> getSingleCourse <span class="token punctuation">,</span> updateCourse <span class="token punctuation">,</span> deleteCourse <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'../controllers/course'</span> <span class="token punctuation">;</span><span class="token operator">...</span>router <span class="token punctuation">.</span> <span class="token keyword">delete</span> <span class="token punctuation">(</span> <span class="token string">'/courses/:courseId'</span> <span class="token punctuation">,</span> deleteCourse <span class="token punctuation">)</span> <span class="token punctuation">;</span>
Conclude
- Through this article, we have successfully built a CRUD web application with nodejs, express, mongoDB, thereby understanding the flow between server and client side. Next article about nodejs.
- Reference stream: https://medium.com/fbdevclagos/developing-basic-crud-operations-with-node-express-and-mongodb-e754acb9cc15