Creating a REST API using Node.js in the MERN stack involves several steps, including setting up MongoDB, creating the backend with Express, and using tools like Postman to test the API. Here's a detailed guide to help you through the process:
1. Set Up Your Environment
Install Node.js and npm
Download and install Node.js from nodejs.org. npm is included with Node.js.
Install MongoDB
Download and install MongoDB from mongodb.com.
2. Create a New Project
-
Initialize a new Node.js project:
mkdir mern-rest-api cd mern-rest-api npm init -y
-
Install dependencies:
npm install express mongoose body-parser cors npm install --save-dev nodemon
-
Install additional tools:
npm install express-validator
3. Set Up MongoDB
-
Start MongoDB:
- On Windows: Run
mongod
in your terminal. - On Mac: You can use
brew services start mongodb-community
.
- On Windows: Run
-
Create a new database and collection:
- Use MongoDB Compass or the MongoDB shell to create a new database (e.g.,
mern_db
) and a collection (e.g.,users
).
- Use MongoDB Compass or the MongoDB shell to create a new database (e.g.,
4. Create the Express Server
-
Create the directory structure:
mkdir src cd src mkdir config controllers models routes touch server.js
-
Set up the
server.js
file:
const express = require('express'); const mongoose = require('mongoose'); const bodyParser = require('body-parser'); const cors = require('cors'); const app = express(); // Middleware app.use(bodyParser.json()); app.use(cors()); // MongoDB connection mongoose.connect('mongodb://localhost:27017/mern_db', { useNewUrlParser: true, useUnifiedTopology: true, }); mongoose.connection.once('open', () => { console.log('Connected to MongoDB'); }); // Routes const users = require('./routes/users'); app.use('/api/users', users); const PORT = process.env.PORT || 5000; app.listen(PORT, () => { console.log(`Server is running on port ${PORT}`); });
5. Create Models
-
Create
models/User.js
:
const mongoose = require('mongoose'); const UserSchema = new mongoose.Schema({ name: { type: String, required: true, }, email: { type: String, required: true, unique: true, }, password: { type: String, required: true, }, }); module.exports = mongoose.model('User', UserSchema);
6. Create Controllers
-
Create
controllers/userController.js
:
const User = require('../models/User'); const { body, validationResult } = require('express-validator'); // Get all users exports.getUsers = async (req, res) => { try { const users = await User.find(); res.json(users); } catch (err) { res.status(500).json({ message: err.message }); } }; // Create a new user exports.createUser = [ body('name').notEmpty().withMessage('Name is required'), body('email').isEmail().withMessage('Email is not valid'), body('password').isLength({ min: 6 }).withMessage('Password must be at least 6 characters long'), async (req, res) => { const errors = validationResult(req); if (!errors.isEmpty()) { return res.status(400).json({ errors: errors.array() }); } const { name, email, password } = req.body; try { const user = new User({ name, email, password }); await user.save(); res.status(201).json(user); } catch (err) { res.status(500).json({ message: err.message }); } }, ];
7. Create Routes
-
Create
routes/users.js
:
const express = require('express'); const router = express.Router(); const userController = require('../controllers/userController'); // Get all users router.get('/', userController.getUsers); // Create a new user router.post('/', userController.createUser); module.exports = router;
8. Test the API with Postman
-
Start the server:
nodemon src/server.js
Open Postman and create a new request:
- **GET** `http://localhost:5000/api/users` to fetch all users.
- **POST** `http://localhost:5000/api/users` to create a new user. In the body, use the following JSON format:
```json
{
"name": "thirdearnest123",
"email": "thirdearnest123@example.com",
"password": "password123"
}
```
Useful Resources
By following these steps, you will have a basic REST API setup using the MERN stack. You can further expand this by adding more features, authentication, and front-end integration.
Top comments (0)