Express-使用axios返回带有命名路由参数的某些文档

时间:2018-09-23 01:32:07

标签: mongodb reactjs express mongoose axios

我无法在选定的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的所有订单。我在下面添加了一张图片:

enter image description here

有指针吗?

1 个答案:

答案 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);
    })
  • 解决/拒绝后,您需要处理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);
    })
});