NodeJS 使用mongoose findbyid和express从数据库获取对象只适用于回调?回调在新的js框架中的重要性?

mnowg1ta  于 2023-04-29  发布在  Node.js
关注(0)|答案(1)|浏览(84)

我正在做关于MDN文档的Express本地库教程,想尝试在不使用回调方法的情况下返回对象。
当将id的请求对象参数传递给findById mongoose方法(如var bookinstance = BookInstance.findById(req.params.id);)并将log传递到控制台时,这是bookinstance的内容:
BookInstance.findOne({ _id: '63e17d2395d1d4e11604cf22' })
向findById方法传递id和回调函数时,如下所示

BookInstance.findById(req.params.id, function(err, instance) {
      if (err) {
         next(err);
      }
      console.log('findById callback: ' + instance);
      res.render("bookinstance_delete", {
         title: "Book Instance Delete",
         id: instance._id,
         imprint: instance.imprint,
         book: instance.book
      })
   })

并登录到控制台,输出期望的书示例对象:

findById callback: {
  _id: new ObjectId("63e17d2395d1d4e11604cf22"),
  book: new ObjectId("63e17d2395d1d4e11604cf16"),
  imprint: 'New York Tom Doherty Associates, 2016.',
  status: 'Available',
  due_back: 2023-02-06T22:20:19.928Z,
  __v: 0
}

这和javascript有什么关系吗?这是我第一次接触express、node、mongoose以及所有这些基于javascript的框架和技术,它们似乎都大量使用回调。回调的目的是不是只是有一种方式说,嘿,执行这个任务,当你完成时,做这个任务?
当我没有使用回调时,返回的对象是对象和方法(findone),当执行时,会给予我bookinstance对象和属性。所以回调函数会将该对象作为示例参数,执行它并返回该对象?是这样吗

tkclm6bt

tkclm6bt1#

您应该await返回的查询以检索结果:

var bookinstance = await BookInstance.findById(req.params.id);

别忘了将它嵌套到async函数中。

相关问题