Step 1: Setting Up Your Development Environment
Install Node.js and npm from Node.js website.
Use Git for version control.
Step 2: Installing Necessary Packages
Install required packages using npm:
npm init -y
npm install express mongoose body-parser cors helmet jsonwebtoken
Step 3: Building the Express Application
const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const cors = require('cors');
const helmet = require('helmet');
const { handleErrors } = require('./middleware/errorMiddleware');
const userRoutes = require('./routes/userRoutes');
const app = express();
const port = process.env.PORT || 3000;
// Connect to MongoDB
mongoose.connect('mongodb://localhost/secure-rest-api', { useNewUrlParser: true, useUnifiedTopology: true });
app.use(bodyParser.json());
app.use(cors());
app.use(helmet());
app.use('/users', userRoutes);
app.use(handleErrors);
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
// Step 4: Defining REST API Routes
// routes/userRoutes.js
const express = require('express');
const router = express.Router();
const { authenticateUser } = require('../middleware/authMiddleware');
// Define user-related routes here
router.get('/profile', authenticateUser, (req, res) => {
res.json({ message: 'This is a protected route', user: req.user });
});
module.exports = router;
// Step 5: Implementing Authentication with JWT
// auth.js
const jwt = require('jsonwebtoken');
const generateToken = (user) => {
const secret = 'your-secret-key';
return jwt.sign({ userId: user._id }, secret, { expiresIn: '1h' });
};
const verifyToken = (token) => {
const secret = 'your-secret-key';
return jwt.verify(token, secret);
};
module.exports = { generateToken, verifyToken };
// Step 6: Protecting Routes with Middleware
// middleware/authMiddleware.js
const { verifyToken } = require('../auth');
const authenticateUser = (req, res, next) => {
const token = req.headers.authorization;
if (token) {
try {
const user = verifyToken(token);
req.user = user;
next();
} catch (error) {
res.status(401).json({ error: 'Invalid token' });
}
} else {
res.status(401).json({ error: 'Token not provided' });
}
};
module.exports = { authenticateUser };
// Step 7: Error Handling
// middleware/errorMiddleware.js
const handleErrors = (err, req, res, next) => {
console.error(err);
res.status(500).json({ error: 'Something went wrong' });
};
module.exports = { handleErrors };