我无法在选定的GET请求的前端和后端之间进行通信。
我使用的是React前端,后端设置了express / mongoose。
在前端,我使用axios进行GET调用:
axios.get('/api/orders/', {
params : {
name: this.props.user.name // user name can be Bob
}
})
在后端,我很难理解查询数据库的正确方法(下面的示例不起作用)。我发现了.select
的东西,但是即使那样,我仍然无法使它起作用:
router.get('/orders', function(req, res) {
Order.find({}).select(req.params).then(function (order) {
res.send(req.params);
})
});
我也尝试这样做,以查看是否可以使params
正确发送并且不消亡:
router.get('/orders/:name', function(req, res) {
res.send('client sent :',req.query.name);
});
订单文档模型包含容纳有序数组和附加到该对象的名称(类型:字符串)的对象。该订单的猫鼬方案:
const orderScheme = new Schema({
name : { type : String },
orders : { type : Array}
});
在我的MongoDB中,我可以看到所有“主订单”都已发回。每个主订单都有提交者的名字,以及其中的所有订单(可能有很多订单)。
我要确切执行的操作是提取所有具有特定名称的订单。因此,如果我搜索“ TestAccount”,我将得到bob的所有订单。我在下面添加了一张图片:
有指针吗?
答案 0 :(得分:1)
客户端:
axios.get('/api/orders/' + this.props.user.name)
.then(function (response) {
// handle success
console.log(response);
})
.catch(function (error) {
// handle error
console.log(error);
})
服务器端:
router.get('/orders/:name', function(req, res) {
return Order.find({name: req.params.name}).then(function(orders) {
// return orders when resolved
res.send(orders);
})
.catch(function (error) {
// handle error
console.log(error);
})
});
您没有在路由路径中指定名为route parameter的名称。
您也不会仅通过使用req.params
来访问name
属性。
您应该使用Model.find()
条件参数来指定您要查找的文档。 Query.prototype.select()
用于过滤文档字段。