在mysql查询之后承诺警告

我是新的nodejs。 我有这个代码:

exports.index = function(req, res) { User.findAll({ attributes: [ '_id', 'name', 'email', 'role', 'provider' ] }) .then(function(users) { res.status(200).json(users); }) .catch(handleError(res)); }; function handleError(res, statusCode) { statusCode = statusCode || 500; return function(err) { res.status(statusCode).send(err); }; } 

执行时我收到这个警告:

警告:一个承诺是在一个处理程序中创build的,但没有被返回

在[object Object] .Model.findAll(C:\ aii \ tema2-node \ node_modules \ sequelize \ lib \ model.js:1329:18)

你知道我为什么收到这个警告吗?

谢谢。

我认为你必须返回User.findAll

 exports.index = function(req, res) { return User.findAll({ attributes: [ '_id', 'name', 'email', 'role', 'provider' ] }) .then(function(users) { res.status(200).json(users); }) .catch(handleError(res)); }; 

原始代码有几个问题:

  1. 导出的函数不返回任何内容。 来电者如何知道成功与否?

  2. .then()处理程序不会返回任何导致promise的parsing值为undefined的值(记住then()返回一个promise以及catch() )。

  3. 即使模块函数返回了承诺链(如上面的答案),由于上述原因,它仍然会parsing为undefined

我很可能会重构你的代码,像下面的psuedocode。 我假设你正在使用类似express的东西

  var User = require("<your User module>"); //assuming app has been initialized... app.get("/users", (req,res) => { User.findAll({ attributes: [ '_id', 'name', 'email', 'role', 'provider'] }) .then((users) => { res.status(200).json(users); }) .catch((err) => { //ideally send a generalized msg instead res.status(500, {error: err } ); }); }); 

这里没有任何由then()catch()返回的promise的消费者,所以如果它们返回undefined就没有什么大不了的