Node.js 为什么在节点模块中无法识别我的返回变量值
我有一个节点文件,请求从另一个模块页面返回一个变量。所有数据函数都“工作”,但“返回查询”没有将查询值发送回我的初始请求,并且我的existingUser变量未定义。在控制台日志中,我在查询日志之前显示了existingUser日志检查。这就像等待请求被忽略一样 感谢您的帮助…我是这一切的新手 请求页面-Node.js 为什么在节点模块中无法识别我的返回变量值,node.js,node-modules,return-value,Node.js,Node Modules,Return Value,我有一个节点文件,请求从另一个模块页面返回一个变量。所有数据函数都“工作”,但“返回查询”没有将查询值发送回我的初始请求,并且我的existingUser变量未定义。在控制台日志中,我在查询日志之前显示了existingUser日志检查。这就像等待请求被忽略一样 感谢您的帮助…我是这一切的新手 请求页面- const sqlRequests1 = require('./sqlAdmin/sqlRequests1'); . . . app.post('/', async (req, res) =&
const sqlRequests1 = require('./sqlAdmin/sqlRequests1');
.
.
.
app.post('/', async (req, res) => {
const { club, first_name, last_name, email, tel, address, post_code, password, passwordConfirmation} = req.body;
let existingUser = await new sqlRequests1.Queries('contact',email).getAll();
console.log(`existingUser is ${existingUser}`); //THIS CONSOLE LOG RETURNS "undefined"
if (existingUser) {
return res.send('Email in use');
}
if (password !== passwordConfirmation) {
return res.send('Passwords must match');
}
res.send('Account created!!!');
});
模块页面-sqlRequests1
class Queries {
constructor(table, selection) {
this.table = table;
this.selection = selection;
console.log(selection); //THIS DATA CHECK WORKS
if(!table) {
throw new Error('Need a table to connect to');
};
};
getAll() {
//Confirm if the emasil exists - if it does then give error message
let q = 'SELECT * FROM ?? ';
connection.query(q, this.table, function (error, results,fields) {
if (error) throw error;
const query = (results[0].email);
console.log(`query is ${query}`); //THIS PROVIDES THE CORRECT DATA
return query; //THIS RETURN IS NOT GETTING BACK TO existingUser variable?
});
};
};
module.exports.Queries = Queries;
如果您想使用wait并阻止代码进一步移动,则必须转换get all函数以返回承诺
getAll() {
new Promise((resolve,reject) => {
//Confirm if the emasil exists - if it does then give error message
let q = 'SELECT * FROM ?? ';
connection.query(q, this.table, function (error, results,fields) {
if (error) reject(error);
const query = (results[0].email);
console.log(`query is ${query}`); //THIS PROVIDES THE CORRECT DATA
resolve(query) //THIS RETURN IS NOT GETTING BACK TO existingUser variable?
});
})
}
承诺是前进的方向,但它只是错过了回报
getAll() {
return new Promise((resolve,reject) => { //ADDING return here fixed it
//Confirm if the emasil exists - if it does then give error message
let q = 'SELECT * FROM ?? ';
connection.query(q, this.table, function (error, results,fields) {
if (error) reject(error);
const query = (results[0].email);
console.log(`query is ${query}`); //THIS PROVIDES THE CORRECT DATA
resolve(query) //THIS RETURN IS NOT GETTING BACK TO existingUser variable?
});
})
}
下面的帖子展示了一些关于如何处理这种情况的建议:第二个答案(不是公认的答案)提供了最干净、最清晰的方法来处理代码。谢谢,但我仍然得到了未定义的返回/是的,我错过了返回。我认为它应该在放了返回声明后工作。返回新的承诺