404向Express路线添加参数时

时间:2019-01-17 04:53:28

标签: javascript express

我正在尝试传递类似url参数的

  

http://xxx/api/users?facebookUserId=10213594301678639

这是我的App.js:

// route setup
const usersRouter = require('./routes/users');
app.use('/api/users', usersRouter);

module.exports = app;

这是我的users.js:

router.get('/:facebookUserId', jsonParser, async (req, res) => {
  // get user by facebookUserId
  const users = db.collection('users');  
  const facebookUserId = req.params.facebookUserId; 
  const query = {
    facebookUserId: facebookUserId,
  };
  const user = await findOne(users, query);
  res.json(user);
});

module.exports = router;

我的问题是,添加后我会立即得到404

  

:facebookUserId

到router.get()

3 个答案:

答案 0 :(得分:3)

似乎您正在尝试从获取端点路由获取查询字符串而不是参数。

在您的 users.js 中,从req.query

获取查询字符串
// as your path is the same with the endpoint prefix api/users, use '/'
router.get('/', jsonParser, async (req, res) => {
  // get user by facebookUserId
  const users = db.collection('users');  

  // get the query string from req.query
  const facebookUserId = req.query.facebookUserId; 

  const query = {
    facebookUserId: facebookUserId,
  };
  const user = await findOne(users, query);
  res.json(user);
});

module.exports = router;

如果要像在原始代码中那样使用参数/:facebookUserId,则需要将端点调用更改为 http://xxx/api/users/10213594301678639

答案 1 :(得分:1)

在您的路由中,您期望参数facebookUserId是一个路由参数(例如/ api / users / 10213594301678639),但是在上面的示例中,您正在使用查询参数(/ api / users?facebookUserId = 10213594301678639)

答案 2 :(得分:0)

执行以下操作以捕获查询参数的工作原理:

router.get(':facebookUserId?' ... (req, res) => { 
 ... 
 const facebookUserId = req.query.facebookUserId; 
 ... 
});