Javascript 404向Express route添加参数时
我正在尝试传递url参数,如 这是我的App.js: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
// 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;…});