Implementing RESTful Routing in Node.js

Learn how to effectively create RESTful APIs using routing techniques in Node.js, enhancing usability and clarity.

0 likes
3 views

Rule Content

{
  "title": "Implementing RESTful Routing in Node.js",
  "description": "Learn how to effectively create RESTful APIs using routing techniques in Node.js, enhancing usability and clarity.",
  "category": "Node.js Cursor Rules",
  "rules": [
    {
      "name": "Use Express Router for Modular Routing",
      "description": "Utilize `express.Router()` to modularize routes, improving code organization and maintainability.",
      "example": {
        "code": "const express = require('express');\nconst usersRouter = express.Router();\n\nusersRouter.get('/', (req, res) => {\n  res.send('Get all users');\n});\n\nusersRouter.post('/create', (req, res) => {\n  res.send('Create a user');\n});\n\nmodule.exports = usersRouter;",
        "language": "javascript"
      },
      "references": [
        {
          "title": "Best Practices for Organizing Route Handlers in a Node.js Project",
          "url": "https://gurubase.io/g/nodejs/best-practices-organizing-route-handlers-nodejs"
        }
      ]
    },
    {
      "name": "Separate Controllers from Routes",
      "description": "Keep route definitions and business logic separate by using controllers, enhancing code clarity and reusability.",
      "example": {
        "code": "// controllers/userController.js\nexports.getAllUsers = (req, res) => {\n  res.send('Get all users');\n};\n\nexports.createUser = (req, res) => {\n  res.send('Create a user');\n};\n\n// routes/users.js\nconst express = require('express');\nconst userController = require('../controllers/userController');\nconst usersRouter = express.Router();\n\nusersRouter.get('/', userController.getAllUsers);\nusersRouter.post('/create', userController.createUser);\n\nmodule.exports = usersRouter;",
        "language": "javascript"
      },
      "references": [
        {
          "title": "Best Practices for Organizing Route Handlers in a Node.js Project",
          "url": "https://gurubase.io/g/nodejs/best-practices-organizing-route-handlers-nodejs"
        }
      ]
    },
    {
      "name": "Implement Proper HTTP Methods and Status Codes",
      "description": "Use appropriate HTTP methods (GET, POST, PUT, DELETE) and status codes to make APIs more understandable and consistent.",
      "example": {
        "code": "app.get('/users', (req, res) => {\n  // Retrieve users from the database\n  res.status(200).json(users);\n});\n\napp.post('/users', (req, res) => {\n  // Add a new user to the database\n  res.status(201).json(newUser);\n});\n\napp.put('/users/:id', (req, res) => {\n  // Update user with the given ID\n  res.status(200).json(updatedUser);\n});\n\napp.delete('/users/:id', (req, res) => {\n  // Delete user with the given ID\n  res.status(204).send();\n});",
        "language": "javascript"
      },
      "references": [
        {
          "title": "What are the best practices for creating RESTful APIs with Node.js?",
          "url": "https://reintech.io/blog/best-practices-creating-restful-apis-nodejs"
        }
      ]
    },
    {
      "name": "Validate and Sanitize User Input",
      "description": "Use middleware like `express-validator` to validate and sanitize incoming data, preventing security vulnerabilities.",
      "example": {
        "code": "const { body, validationResult } = require('express-validator');\n\napp.post('/users', [\n  body('email').isEmail(),\n  body('password').isLength({ min: 8 })\n], (req, res) => {\n  const errors = validationResult(req);\n  if (!errors.isEmpty()) {\n    return res.status(400).json({ errors: errors.array() });\n  }\n  // Add a new user to the database\n});",
        "language": "javascript"
      },
      "references": [
        {
          "title": "What are the best practices for creating RESTful APIs with Node.js?",
          "url": "https://reintech.io/blog/best-practices-creating-restful-apis-nodejs"
        }
      ]
    },
    {
      "name": "Centralize Error Handling",
      "description": "Implement centralized error-handling middleware to manage errors consistently across the application.",
      "example": {
        "code": "app.use((err, req, res, next) => {\n  console.error(err.stack);\n  res.status(500).send('Something broke!');\n});",
        "language": "javascript"
      },
      "references": [
        {
          "title": "Best Practices for Organizing Route Handlers in a Node.js Project",
          "url": "https://gurubase.io/g/nodejs/best-practices-organizing-route-handlers-nodejs"
        }
      ]
    },
    {
      "name": "Use Environment Variables for Configuration",
      "description": "Store sensitive information like API keys and database URLs in environment variables to enhance security and flexibility.",
      "example": {
        "code": "require('dotenv').config();\nconst dbUrl = process.env.DB_URL;",
        "language": "javascript"
      },
      "references": [
        {
          "title": "What are the best practices for creating RESTful APIs with Node.js?",
          "url": "https://reintech.io/blog/best-practices-creating-restful-apis-nodejs"
        }
      ]
    },
    {
      "name": "Implement Token-Based Authentication and Authorization",
      "description": "Use JSON Web Tokens (JWT) for authentication to ensure that only authorized users have access to certain routes or data.",
      "example": {
        "code": "const jwt = require('jsonwebtoken');\n\napp.post('/login', (req, res) => {\n  // Authenticate user\n  const token = jwt.sign({ id: user.id }, process.env.JWT_SECRET, { expiresIn: '1h' });\n  res.json({ token });\n});\n\nconst authenticateJWT = (req, res, next) => {\n  const token = req.header('Authorization');\n  if (token) {\n    jwt.verify(token, process.env.JWT_SECRET, (err, user) => {\n      if (err) {\n        return res.sendStatus(403);\n      }\n      req.user = user;\n      next();\n    });\n  } else {\n    res.sendStatus(401);\n  }\n};",
        "language": "javascript"
      },
      "references": [
        {
          "title": "Creating RESTful APIs with Express.js: Tips and Best Practices for Full Stack Developers",
          "url": "https://www.flexnoon.com/creating-restful-apis-with-express-js-tips-and-best-practices-for-full-stack-developers/"
        }
      ]
    },
    {
      "name": "Enable CORS for Cross-Origin Resource Sharing",
      "description": "Configure CORS to allow or restrict cross-origin requests, ensuring secure and controlled access to your API.",
      "example": {
        "code": "const cors = require('cors');\n\napp.use(cors({\n  origin: 'https://example.com',\n  methods: ['GET', 'POST', 'PUT', 'DELETE'],\n  allowedHeaders: ['Content-Type', 'Authorization']\n}));",
        "language": "javascript"
      },
      "references": [
        {
          "title": "Creating RESTful APIs with Express.js: Tips and Best Practices for Full Stack Developers",
          "url": "https://www.flexnoon.com/creating-restful-apis-with-express-js-tips-and-best-practices-for-full-stack-developers/"
        }
      ]
    },
    {
      "name": "Document Your API",
      "description": "Use tools like Swagger or Postman to create interactive documentation, providing details on each endpoint, request parameters, and response formats.",
      "example": {
        "code": "const swaggerJsDoc = require('swagger-jsdoc');\nconst swaggerUi = require('swagger-ui-express');\n\nconst swaggerOptions = {\n  swaggerDefinition: {\n    openapi: '3.0.0',\n    info: {\n      title: 'API Documentation',\n      version: '1.0.0',\n      description: 'API Information',\n    },\n    servers: [\n      {\n        url: 'http://localhost:3000/api',\n      },\n    ],\n  },\n  apis: ['./routes/*.js'],\n};\n\nconst swaggerDocs = swaggerJsDoc(swaggerOptions);\napp.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocs));",
        "language": "javascript"
      },
      "references": [
        {
          "title": "Common Pitfalls When Building RESTful APIs with Node.js",
          "url": "https://infinitejs.com/posts/common-pitfalls-restful-apis-nodejs/"
        }
      ]
    }
  ]
}