将对象从SQL查询函数传递给一个单独的函数

我是新来的节点和承诺。 我有两个文件 – server.jsdb.js

server.js db.js作为模块导入。

我从db.js模块中的SQL数据库中获取一些数据,并试图将这些数据传递给server.js的函数。 我已经成功从数据库中提取数据,但是当我尝试将它传递给server.js的函数时,它只返回一个undefined值。

这是代码

server.js

 const db = require('./db.js'); app.post('/api/trigger-push-msg/', function (req, res) { return getSubscriptionsFromDatabase() .then(function(subscriptions) { // Do something }); }); function getSubscriptionsFromDatabase() { return new Promise((resolve, reject) => { let subscriptions = db.getSubscriptions(); console.log(subscriptions); // this only prints "undefined" if (subscriptions != undefined) { resolve(subscriptions); } else { reject("No"); // this executes } }) } 

db.js

 module.exports = { getSubscriptions: function() { var sql = "SELECT * FROM subscriptions"; con.query(sql, function(err, result) { if (err) throw err; console.log(result); // this prints the same result as I want return result; }) } } 

getSubscriptions没有返回语句

并且考虑到其中有一些asynchronous内容,你应该把所有的内容都包含在一个promise中,并且只有在parsing后才触发后续的逻辑。

 module.exports = { getSubscriptions: function() { var sql = "SELECT * FROM subscriptions"; return new Promise(function(resolve, reject){ con.query(sql, function(err, result) { if (err) return reject(err); resolve(result); }) }) } } 

然后:

 function getSubscriptionsFromDatabase() { return db.getSubscriptions() .then(function(subscriptions){ return subscriptions; }) } 

并在你的路线:

 app.post('/api/trigger-push-msg/', function (req, res) { getSubscriptionsFromDatabase() .then(function(subscriptions) { res.send(subscriptions); }) .catch(function(err){ res.sendStatus(500); }) });