【问题标题】:App crashed & returned null although all the data printed correctly [ExpressJS]尽管所有数据都正确打印,但应用程序崩溃并返回 null [ExpressJS]
【发布时间】:2019-06-05 05:34:00
【问题描述】:

我有一个很奇怪的问题,应用程序在正确打印所有数据后崩溃,网页(视图)第一次工作然后重新加载页面后停止。

router.get('/:category/:book', function (req, res) {
    Book.findOne({slug: req.params.book}, function (bookErr, book) { 
       User.findOne({_id: book.user},function(userErr, user){

         if (bookErr || userErr) {
              console.log(bookErr, userErr);
         }
          });

                     res.render('book', {
                          b: book,
                          user: user
                         });
   }); 
  })

*备注:

  • 当我控制台记录“req.params.book”时,它打印正确。
  • 当我控制台记录“书”时,它打印正确。
  • 当我控制台记录“用户”时,它会正确打印。
  • 当我转到 HTML 视图时,所有数据都正确查看。
  • 应用程序崩溃并在页面加载后显示以下消息。
  • 页面重新加载后,服务器完全停止。
TypeError: Cannot read property 'user' of null
    at /home/hossam/Public/mostaml-book/routes/books.js:235:41
    at model.Query.<anonymous> (/home/hossam/Public/mostaml-book/node_modules/mongoose/lib/model.js:4093:16)
    at /home/hossam/Public/mostaml-book/node_modules/kareem/index.js:273:21
    at /home/hossam/Public/mostaml-book/node_modules/kareem/index.js:131:16
    at process._tickCallback (internal/process/next_tick.js:61:11)
Emitted 'error' event at:
    at model.Query.<anonymous> (/home/hossam/Public/mostaml-book/node_modules/mongoose/lib/model.js:4095:12)
    at /home/hossam/Public/mostaml-book/node_modules/kareem/index.js:273:21
    at /home/hossam/Public/mostaml-book/node_modules/kareem/index.js:131:16
    at process._tickCallback (internal/process/next_tick.js:61:11)

这是一个错误吗? & 有没有更方便的方式打印这些收藏?

【问题讨论】:

  • books.js 是您的客户端 javascript 文件吗?
  • 不,它包含路线。比如:router.get('/:category/:book', function (req, res).

标签: javascript node.js mongodb express nosql


【解决方案1】:

我使用纯 promise。这里是它的结构。

     function PromiseDemo(){
           return new Promise((resolve,reject)=>{


           your first query code here
           //here dont forget to write resolve({result:'success'}); at the end of your code

   }
    return PromiseDemo().then(Response=>{
    your second query code here
    })

这是 promise 的结构。您可以在此处查看更多 abour promises promise is nodejs

【讨论】:

  • 对不起,我更新了代码,忘记添加上面的res.render。现在有什么问题?
  • 哦,好吧,我认为这可能是个问题。
  • @HossamBrgoth ,我们知道 NodeJS 适用于 Async 类型。因此,您的第二个查找循环可能会提前执行,然后执行第一个查找查询,因此当第二个查询首先执行时,即时间服务器不会获取任何用户,因此它会给出错误。您应该使用 aync-await 或纯 Promise 来解决这个问题。
  • 所以我的方法不合适?你能告诉我异步等待中的代码吗?
【解决方案2】:

好的,问题解决了,解决方法很奇怪!

在 HTML 视图中,图像源是三个点 (...)!

<img src='...'>

为此,req.params 请求 book slug,然后请求这三个点,由于这三个点在集合中不存在,所以结果将为 null。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多