Экспресс js MongoDB вернуть объект после POST - PullRequest
1 голос
/ 18 марта 2019

Как я могу получить объект обратно из базы данных в Express js?Когда я делаю запрос POST, я получаю статус 201 обратно, а не объект из ответа.

Путь, как он ниже, возвращает пустое поле res.data вместо объекта.

router.post('/', async (req, res) => {
  const websites = await loadWebsitesCollection();
  await websites.insertOne({
    title: req.body.title,
    url: req.body.url,
    cms: req.body.cms,
    fw: req.body.fw,
    user: req.body.user,
    createdAt: new Date()
  });
  //TODO Need to get the response from the post request
  res.status(201).send();
  res.status(404).send('Sorry, we cannot find that!');
  res.status(500).send({ error: 'something blew up' });
})

Чтобы вернуть все объекты обратно в массив, я могу сделать это так:

res.send(await websites.find({}).toArray());

Ответы [ 2 ]

1 голос
/ 18 марта 2019

В методе mongoDB insertOne возвращает документ, содержащий acknowledged как true и текущий вставленный идентификатор (ObjectId) как insertedId. Таким образом, вы можете сохранить ответ от mongoDB в переменной и, если найдется insertedId, вы можете запросить данные из mongoDB или подготовить данные из тела запроса.

...
const insertion = await websites.insertOne({
  title: req.body.title,
  url: req.body.url,
  cms: req.body.cms,
  fw: req.body.fw,
  user: req.body.user,
  createdAt: new Date()
});
let data = {};
if (insertion.acknowledged) {
  // ... prepare the data
  data = await websites.findOne({_id: insertion.insertedId});
}

... 

res.send(data);

Я надеюсь, что это работает!

0 голосов
/ 18 марта 2019

хорошо, вы можете попробовать этот способ

    try{let websites = await loadWebsitesCollection.insertOne({
title: req.body.title,
url: req.body.url,
cms: req.body.cms,
fw: req.body.fw,
user: req.body.user,
createdAt: new Date() });;
res.send(websites );}catch(e){res.status(400).send(e)}

или так

        try{var websites = new loadWebsitesCollection({
title: req.body.title,
url: req.body.url,
cms: req.body.cms,
fw: req.body.fw,
user: req.body.user,
createdAt: new Date()})var reswebsites  = await websites .insertOne(); res.send(reswebsites );}catch(e){res.status(400).send(e)}
...