Javascript 404向Express route添加参数时

Javascript 404向Express route添加参数时,javascript,express,Javascript,Express,我正在尝试传递url参数,如 这是我的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 f

我正在尝试传递url参数,如

这是我的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()

您似乎试图从get端点路由获取查询字符串而不是参数

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;
如果您想在原始代码中使用param
/:facebookUserId
,则需要将端点调用更改为类似
http://xxx/api/users/10213594301678639

您似乎试图从get endpoint路由获取查询字符串而不是参数

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;
如果您想在原始代码中使用param
/:facebookUserId
,则需要将端点调用更改为类似
http://xxx/api/users/10213594301678639

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

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

执行以下操作以捕获查询参数:

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

执行以下操作以捕获查询参数:

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

示例url中的facebookUserId不是url参数。这是一个查询参数。这是因为如果您看到您已将路由定义为
/api/users/?facebookUserId=10213594301678639
,但实际上您正在向
/api/users?facebookUserId=10213594301678639
发出请求,请注意额外的
/
@AlexanderStaroselsky执行以下操作以捕获查询参数:
router.get(':facebookUserId?')。。。(req,res)=>{…const facebookUserId=req.query.facebookUserId;…});
facebookUserId在您的示例url中不是url参数。它是一个查询参数。这是因为如果您看到您已将路由定义为
/api/users/?facebookUserId=10213594301678639
,但实际上您正在向
/api/users?facebookUserId=10213594301678639
注意额外的
//code>@AlexanderStaroselsky以下捕获查询参数的方法有效:
router.get(':facebookUserId?'…(req,res)=>{…const facebookUserId=req.query.facebookUserId;…});