如何在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());

最佳答案

在mongoDB中,insertOne方法返回包含acknowledged作为true和当前插入的id(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);





我希望它能起作用!

10-05 20:50
查看更多