我有一个名为 extrafunctions.js 的文件,它导出要由 app.js 运行的函数。这些函数之一包括 MongoDB 查询 findOne。问题是该函数在查询完成之前返回一个值,因此 app.js 没有获得所需的数据,而是“未定义”。
我在某种程度上尝试过 Promises,但没有任何效果。
应用程序.js:
const extraFunctions = require("./extraFunctions");
app.get('/api/login', (req, res) => {
res.end(extraFunctions.login());
});
extraFunctions.js:
function login ()
{
client.connect(err => {
var collection = client.db("site").collection("test");
collection.findOne({}, (err, result) => {
if (err) throw err;
console.log(result);
return result;
});
client.close();
});
}
module.exports.login = login;
固定版本与接受的评论相同,但必须更改res(result)
为res(JSON.stringify(result))
你需要使用promise
or async-await
,下面是一个promise实现的例子:
应用程序js
const extraFunctions = require("./extraFunctions");
app.get('/api/login', (req, res) => {
extraFunctions.login().then(result =>{
res.end(result);
})
});
extraFunctions.js
function login() {
return new Promise((res, rej) => {
client.connect(err => {
if(err){
rej(err)
}
var collection = client.db("site").collection("test");
collection.findOne({}, (err, result) => {
if (err) rej(err);
console.log(result);
res(result)
});
client.close();
});
})
}
module.exports.login = login;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句