在使用url参数的服务器端获得简单的get方法,并请求该URL的客户端请求(反应),但是问题是服务器返回的参数不确定。这是代码:
服务器(index.js):
router.use('/api/info/:name/:id', require('./info'))`
info.js:
router.get('/', async (req, res) => {
try {
const name = req.params.name;
const id = req.params.id;
console.log('name ' + name +' id ' + id)
return res.status(200).send({
id: id,
name: name
})
} catch (err) {
return res.status(500).send({
message: err.message
})
}
})
和客户端(ReactJS):
componentDidMount(){
const { match: { params } } = this.props;
axios.get(`/api/recipe/${params.name}/${params.id}`)
.then(res => res.data)
.then(data =>{
console.log(data)
})
}
并且正如我所说的,此代码在服务器端返回的名称和ID均未定义,但是客户端可以正常工作(我已将其记录下来并且有效)。在控制台中,它也会给我这个错误(DevTools的控制台)
未捕获(承诺)错误:请求失败,状态码为500
怎么了?谢谢!
答案 0 :(得分:0)
您在index.js
中定义的路由为/api/info/title/:id
,但是您正在对/api/recipe/${params.name}/${params.id}
进行API调用。您的路线不匹配,并且没有将:name
定义为参数。
除非这是您的错字,否则更改router.use
代码以匹配您的API调用应该可以:
router.use('/api/recipe/:name/:id', require('./info'));
答案 1 :(得分:0)
这里是如何设置带有参数的路由,然后使用express
在中间件内部进行访问。
首先,我们需要定义一条路线:
app.use('/users', User)
只要您在'/ users'上收到请求,此代码行就告诉Express使用User
控制器来处理它。现在让我们编写控制器。
const User = express.Router()
User.route('/:name/:id')
.get(getUsers)
现在,每次有人向/users
发出请求时,都会调用User控制器,并且每次向/users/:name/:id
我们的中间件getUsers
发出请求时,都会调用该控制器。现在,在getUsers内部,将名称和ID发送回响应中。
const getUsers = (req,res) =>{
res.status(200).json({
id : req.params.id,
name: req.params.name
})
}
答案 2 :(得分:0)
您没有告诉Express期望参数(请参见here的“参数”部分),您将需要以下内容:
router.get('/:name/:id', async (req, res) => { ... })