Удаление заказов работает, удаление кофе - нет.Одинаковые функции - PullRequest
0 голосов
/ 26 сентября 2019

Мне нужно построить CRUD в nodejs + express + mongodb, и у меня есть функция для удаления заказов, которая успешно удаляет заказы по параметру, и копия этой функции, адаптированная для коллекции "кофе" MongoDB.

Второй возвращает неопределенное значение или просто {}.

Сначала я изменил коллекцию, а затем различные источники в качестве аргументов.

Вот файл server.js

//Этот код работает.

app.delete('/orders/:coffee_id', (req, res) => {
 db.collection('orders').findOneAndDelete({name: req.body.coffee_id}, (err, result) => {
    if (err) return res.send(500, err)
    res.json('Order deleted')
  })
})

// Сбор заказов.Это означает посещение localhost: 3000 / orders / Delta return Заказ удален

Orders Collection. This means visiting localhost:3000/orders/Delta returns Order deleted

// Код не работает должным образом:

app.delete('/coffees/:id', (req, res) => {
db.collection('coffees').findOneAndDelete({'name': req.body.name}, (err, result) => {
    console.log(res.body)  // returns undefined.
    if (err) return res.send(500, err)
    res.json(req.body)
  })
})

Coffees collection. Can't delete from this table. Postman DELETE to localhost:3000/coffees/Jamaica returns {} and console.log(res.body) returns undefined

Коллекция кофе.Не могу удалить из этой таблицы.Почтальон DELETE to localhost: 3000 / coffees / Jamaica возвращает {}, а console.log (res.body) возвращает undefined

postman returns {} meaning undefined

Кто-нибудь видит что-то не так??Пожалуйста, дайте мне знать, если вам нужно больше кода.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 27 сентября 2019

Очевидно, мне нужно было определить ObjectId как

var ObjectId = require('mongodb').ObjectID; //Include ObjectId 

// затем

app.delete('/coffees/:id', (req, res) => {
     db.collection('coffees').findOneAndDelete({'_id': ObjectId(req.params.id)}, (err, result) => {
        console.log(result)
        if (err) return res.send(500, err)
        res.json(result.body)
      })
    })
0 голосов
/ 27 сентября 2019

Здесь следует отметить пару вещей.

1) Ваши маршруты настроены с параметрами пути, но вы пытаетесь ссылаться на свойства из req.body.Я не уверен, как это работает на первом маршруте, но я ожидаю, что это не должно.Для доступа к параметрам пути вы должны использовать req.params.

app.delete('/orders/:coffee_id', (req, res) => {
 db.collection('orders').findOneAndDelete({name: req.params.coffee_id}, (err, result) => {
    ...
  })
})

2) Во втором маршруте вы объявили параметр пути id, но пытаетесь получить доступ к свойству name.Именно здесь реализация отличается от «рабочего» маршрута.Непонятно, если вы хотите использовать ObjectId документа для удаления или если вы планировали использовать name документа.

Используя ObjectId:

app.delete('/coffees/:id', (req, res) => {
  db.collection('coffees').findOneAndDelete({_id: req.params.id}, (err, result) => {
    ...
  })
})

Использование name:

app.delete('/coffees/:name', (req, res) => {
  db.collection('coffees').findOneAndDelete({name: req.params.name}, (err, result) => {
    ...
  })
})

Вывод заключается в том, что вы должны использовать то же значение для ссылки на параметр пути, что и значение, объявленное в путипарам.

/coffees/:id => req.params.id (не req.params.name)

...