Node express中如何获取路由的参数?

参考回答

在 Node.js 的 Express 框架中,可以通过 req.paramsreq.query 来获取路由的参数:

  1. 路径参数(URL Parameters)
    使用 req.params 获取。例如:

    app.get('/user/:id', (req, res) => {
       const userId = req.params.id; // 获取路径参数
       res.send(`User ID is ${userId}`);
    });
    
    JavaScript
  2. 查询参数(Query Parameters)
    使用 req.query 获取。例如:

    app.get('/search', (req, res) => {
       const query = req.query.q; // 获取查询字符串参数
       res.send(`Search query is ${query}`);
    });
    
    JavaScript
  3. 组合使用
    路径参数和查询参数可以组合使用:

    app.get('/product/:id', (req, res) => {
       const productId = req.params.id;
       const category = req.query.category;
       res.send(`Product ID: {productId}, Category:{category}`);
    });
    
    JavaScript

详细讲解与拓展

  1. 路径参数(req.params
    • 适用场景:路径参数通常用于 RESTful API 的资源标识。例如,获取特定用户的详细信息:/user/:id
    • 代码示例
      app.get('/book/:bookId', (req, res) => {
       const bookId = req.params.bookId;
       res.send(`Book ID: ${bookId}`);
      });
      
      JavaScript
    • 拓展
      路径参数可以支持多个动态部分:

      app.get('/store/:storeId/product/:productId', (req, res) => {
       const { storeId, productId } = req.params;
       res.send(`Store ID: {storeId}, Product ID:{productId}`);
      });
      
      JavaScript
  2. 查询参数(req.query
    • 适用场景:查询参数通常用于对数据进行过滤或分页。例如:/products?page=2&limit=10
    • 代码示例
      app.get('/products', (req, res) => {
       const { page, limit } = req.query;
       res.send(`Page: {page}, Limit:{limit}`);
      });
      
      JavaScript
    • 拓展
      查询参数可以解析多个键值对,也可以有默认值:

      app.get('/search', (req, res) => {
       const { q = 'default', sort = 'asc' } = req.query;
       res.send(`Query: {q}, Sort:{sort}`);
      });
      
      JavaScript
  3. 路径参数和查询参数的区别
    • 路径参数是 URL 路径的一部分,必须存在,例如 /user/:id
    • 查询参数是附加在 URL 后的键值对,可以是可选的,例如 /search?q=keyword
    • 区别展示:
      // 路径参数
      app.get('/article/:id', (req, res) => {
       res.send(`Article ID: {req.params.id}`);
      });
      
      // 查询参数
      app.get('/articles', (req, res) => {
       res.send(`Filter:{req.query.filter}`);
      });
      
      JavaScript
  4. 其他拓展
    • 默认值:可以通过代码处理为参数赋默认值。
    • 类型转换:Express 的参数默认是字符串类型,必要时需要进行类型转换:
      app.get('/product/:id', (req, res) => {
       const productId = parseInt(req.params.id, 10); // 转换为整数
       res.send(`Product ID is ${productId}`);
      });
      
      JavaScript
    • 中间件验证:在真实开发中,通常会对参数进行验证:
      app.get('/user/:id', (req, res, next) => {
       const userId = req.params.id;
       if (isNaN(userId)) {
           return res.status(400).send('Invalid User ID');
       }
       next();
      }, (req, res) => {
       res.send(`User ID: ${req.params.id}`);
      });
      
      JavaScript

总结

Express 提供了便捷的 req.paramsreq.query 来处理路由参数,分别适用于路径参数和查询字符串参数。通过合理使用这些方法,并结合验证和类型转换等最佳实践,可以更高效地处理客户端请求和构建灵活的 API 服务。

发表评论

后才能评论