📜  req.query 与 req.params express - Javascript (1)

📅  最后修改于: 2023-12-03 15:19:48.493000             🧑  作者: Mango

Express中的req.query和req.params

在使用Express构建Web应用程序时,提取客户端请求中的数据是非常常见的操作。其中两种常用的方法是使用req.query和req.params。

req.query

req.query可以用来获取客户端通过URL传递的查询参数,如:

GET /users?name=john&age=30 HTTP/1.1

在Express中,可以通过req.query对象来访问这些查询参数:

app.get('/users', function(req, res) {
  const name = req.query.name; // 'john'
  const age = req.query.age; // '30'
  // ...
});

注意,req.query返回的是一个对象,其中包含了所有的查询参数键值对。如果查询参数中有多个同名的参数,req.query会自动将它们保存为数组。

req.params

req.params可以用来获取客户端通过URL传递的路径参数,如:

GET /users/:id HTTP/1.1

在Express中,可以通过在路由中定义路径参数来访问这些参数:

app.get('/users/:id', function(req, res) {
  const id = req.params.id; // '123'
  // ...
});

注意,req.params返回的也是一个对象,其中包含了所有的路径参数键值对。如果路径中有多个参数,req.params会自动将它们保存为对象的属性。

使用示例

以下代码演示了如何同时使用req.query和req.params来提取请求中的参数:

app.get('/users/:id', function(req, res) {
  const id = req.params.id;
  const name = req.query.name;
  const age = req.query.age;
  
  // 根据id查询用户信息
  db.findUserById(id, function(err, user) {
    if (err) {
      return res.status(500).send('Failed to find user');
    }
    
    // 根据name和age筛选用户信息
    const filteredUsers = user.filter(u => u.name === name && u.age === age);
    
    res.render('users', { users: filteredUsers });
  });
});

以上代码会从数据库中获取指定id的用户数据,然后根据查询参数中的name和age来筛选用户信息,并将结果渲染到模板上。

总结

req.query和req.params是Express中提取请求参数的两种常用方式。它们都可以用于获取客户端传递的数据,并且非常方便易用。在实际应用中,我们可以根据需要使用其中的一种或者同时使用两种来实现对请求参数的提取。