未处理的错误'关于mongoose查询的事件

时间:2016-11-11 10:13:04

标签: node.js mongodb mongoose

当我尝试在mongodb中找到最大ID号时,它不起作用。我错过了什么?

这是我的代码:

router.get('/check', function(req, res, next) {
    var query = news.find({}, {"id":1,"_id":0});
    query.select('id');
    query.exec(function (err, result) {
        res.writeHead(200,{'Content-Type':'text/plain;charset=UTF-8'});
        if(err) {
            res.end(err); 
        };
        res.end(result);
    });
});

并且出现了错误:

events.js:160
  throw er; // Unhandled 'error' event
  ^
TypeError: First argument must be a string or Buffer
at ServerResponse.OutgoingMessage.end (_http_outgoing.js:543:11)
at C:\Users\Romy\WebstormProjects\388-admin\routes\admin.js:44:13

1 个答案:

答案 0 :(得分:3)

让我们看一下堆栈跟踪:

TypeError: First argument must be a string or Buffer

好的,所以你没有将正确类型的参数传递给函数。

at ServerResponse.OutgoingMessage.end (_http_outgoing.js:543:11)

该功能称为end

at C:\Users\Romy\WebstormProjects\388-admin\routes\admin.js:44:13

您可以从文件routes\admin.js的第44行(偏移13)调用它。

这很可能是这一行:

res.end(err);

因为错误不是缓冲区的字符串。如果要发回错误消息,可以使用:

res.end(err.message);

此外,请确保在您拨打res.end()后再次调用它,因此请将代码重写为:

    if (err) {
      res.end(err.message); 
    } else {
      res.end(result);
    }

或者,有点短:

    if (err) {
      return res.end(err.message); 
    }
    res.end(result);