Node js Rest API

Node js Rest API

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.

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).

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

Node.js
Express.js
MongoDB
Postman
Mongoose
Express Validator

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.