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 返回具有命名路由参数的某些文档的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Express 访问 Axios 响应?

发送带有 axios 和强大的图像( nodejs -> express )

ReactJS/Express Axios POST 返回 404,来自 Postman

前端的axios.post不返回ant结果

GraphQL从axios返回空数据[重复]

使用 express 配置 CORS 并使用 axios 在前端发出请求