Express - 使用 axios 返回具有命名路由参数的某些文档
Posted
技术标签:
【中文标题】Express - 使用 axios 返回具有命名路由参数的某些文档【英文标题】:Express - return certain documents with named route parameters using axios 【发布时间】:2019-02-26 22:56:31 【问题描述】:我在前端和后端之间针对选定的 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);
);
订单文档模型包含包含有序数组和附加到对象的名称(类型:字符串)的对象。订单的 Mongoose 方案:
const orderScheme = new Schema(
name : type : String ,
orders : type : Array
);
在我的 MongoDB 中,我可以看到所有发回的“主订单”。每个主订单都有提交者的姓名,以及其中的所有订单(可能有大量订单)。
我正在尝试做的是提取所有具有特定名称的订单。所以如果我搜索“TestAccount”,我会得到鲍勃的所有订单。我在下面添加了一张图片:
任何指针?
【问题讨论】:
【参考方案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);
)
您需要在解决/拒绝时处理Promise。
服务器端:
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()
用于过滤文档字段。
【讨论】:
所以我尝试了这种方式。奇怪的是,它只是退回了我所有的订单 ID(我的意思是所有这些......)。他们中的许多人有不同的用户,然后让我们说“鲍勃”。 所以你需要找到一个叫“bob”的人下的订单,而不是过滤集合字段。答案已更新。 @RobertOchinski 你能在你的问题中发布你的Orders
Mongoose 架构吗?
我正在输入 function (order) res.send(order) 。我忘记了 mongo 做了那个 plur 的事情。 @U-ways,你帮了大忙,谢谢。以上是关于Express - 使用 axios 返回具有命名路由参数的某些文档的主要内容,如果未能解决你的问题,请参考以下文章
发送带有 axios 和强大的图像( nodejs -> express )