Экспресс - вернуть определенные документы с именованными параметрами маршрута, используя axios - PullRequest
0 голосов
/ 23 сентября 2018

У меня проблемы со связью между внешним интерфейсом и внутренним сервером для выбранного GET-запроса.

Я использую внешний интерфейс React с настройкой экспресс / мангуста в бэкэнде.

ВВо внешнем интерфейсе я выполняю GET-вызов, используя axios для:

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);
});

Модель документа заказов содержит объекты, в которых размещен упорядоченный массив, и имя (тип: String), прикрепленное к объекту.Схема мангуста для заказа:

const orderScheme = new Schema({
    name : { type : String },
    orders : { type : Array}
});

В моем MongoDB я вижу все «главные заказы», ​​отправленные обратно.Каждый мастер-заказ имеет имя отправителя, а также все заказы в нем (может быть тонна заказов).

То, что я пытаюсь сделать, это подтянуть все ордера с определенным именем.Поэтому, если я буду искать «TestAccount», я получу все заказы Боба.Я включил изображение ниже:

enter image description here

Есть указатели?

1 Ответ

0 голосов
/ 23 сентября 2018

На стороне клиента:

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);
    })
});
  • Вы не указали именованный параметр маршрута в своем пути маршрута.

  • Вы также не можете получить доступ к свойству name, используя только req.params.

  • Вам следуетиспользуйте Model.find() параметр условий, чтобы указать, какой документ [ы] вы пытаетесь найти.Query.prototype.select() - для фильтрации полей документа.

...