我的 req.params.id 未定义。我怎样才能修复我的路线以使其工作
My req.params.id is undefined. How can I fix my route to make it work
我正在 Postman 上测试我的函数 getIndividualTwitt
,当我 console.log req.params.id 时得到未定义。这只发生在这条路线上。如果您能提供任何帮助,我将不胜感激。
index.js
app.use(express.json())
app.use('/profiles',require('../Server/routes/profile'))
app.use('/users',require('../Server/routes/users'))
app.use('/dashboard',require('../Server/routes/dashboard'))
routes/profiles.js
router.post('/:name',authorization,controller.createProfile)
router.get('/:id',authorization,controller.getProfile)
router.delete('/:id',authorization,controller.deleteProfile)
router.get('/twitt/:id',controller.getIndividualTwitt)
controllers/profiles.js
getIndividualTwitt:async(res,req)=>{
try {
console.log('hello')
console.log(req.params.id) //prints undefined
//const twitt=await connectTwitt.getTwitt(req.params.id)
//res.send(twitt)
} catch (error) {
console.log(error)
}
}
邮递员请求:
GET http://localhost:3002/profiles/twitt/8
问题
问题出在您定义的端点的顺序上。 Express 从上到下执行代码,所以当你调用 /profiles/twitt/8
端点时。它将在以下路由器配置中找到匹配项:
router.get('/:id',authorization,controller.getProfile)
解决方案
颠倒已定义端点的顺序,如下所示:
router.get('/twitt/:id',controller.getIndividualTwitt)
router.get('/:id',authorization,controller.getProfile)
替换请求和响应的参数顺序,req
在前:
getIndividualTwitt:async(req,res)=>{
//...
我正在 Postman 上测试我的函数 getIndividualTwitt
,当我 console.log req.params.id 时得到未定义。这只发生在这条路线上。如果您能提供任何帮助,我将不胜感激。
index.js
app.use(express.json())
app.use('/profiles',require('../Server/routes/profile'))
app.use('/users',require('../Server/routes/users'))
app.use('/dashboard',require('../Server/routes/dashboard'))
routes/profiles.js
router.post('/:name',authorization,controller.createProfile)
router.get('/:id',authorization,controller.getProfile)
router.delete('/:id',authorization,controller.deleteProfile)
router.get('/twitt/:id',controller.getIndividualTwitt)
controllers/profiles.js
getIndividualTwitt:async(res,req)=>{
try {
console.log('hello')
console.log(req.params.id) //prints undefined
//const twitt=await connectTwitt.getTwitt(req.params.id)
//res.send(twitt)
} catch (error) {
console.log(error)
}
}
邮递员请求:
GET http://localhost:3002/profiles/twitt/8
问题
问题出在您定义的端点的顺序上。 Express 从上到下执行代码,所以当你调用 /profiles/twitt/8
端点时。它将在以下路由器配置中找到匹配项:
router.get('/:id',authorization,controller.getProfile)
解决方案
颠倒已定义端点的顺序,如下所示:
router.get('/twitt/:id',controller.getIndividualTwitt)
router.get('/:id',authorization,controller.getProfile)
替换请求和响应的参数顺序,req
在前:
getIndividualTwitt:async(req,res)=>{
//...