node.js - Mongoose 查询中未处理的 'error' 事件

标签 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

最佳答案

让我们看一下堆栈跟踪:

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);

关于node.js - Mongoose 查询中未处理的 'error' 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40545716/

相关文章:

Mysql JOIN 获取指定列数据语法错误

node.js - NodeJS 快速 session req.session 未定义

mongodb - 如何在 mongodb 中使用 $lookup 连接多个集合

mongodb - Mongoose 和部分选择/更新

node.js - 错误 : Status Code is 403 (MongoDB's 404) This means that the requested version-platform combination dosnt exist

javascript - Puppeteer 无法在 VPS (DigitalOcean) 上工作

node.js - Url.parse() 对象中的 href 和路径有什么区别?

javascript - 使用node.js使用模板pug从mongodb获取数据

javascript - Mongoose 错误 : JavaScript heap out of memory

node.js - Mongoose 更新中间件 - 需要为每个更新中间件创建 Hook 吗?