我在名为 utils.js 的文件中有以下代码:
class functions {
validateUser(userId, userKey, sessionKey, plId) {
let response = {
validated: false,
isAdmin: false,
isCorporate: false
}
sql.connect(process.env.DB_CONNSTRING, function (err) {
if (err) { msg.success = "0"; msg.message = "ERR_04: Could not connect to server."; res.json(msg); return; };
let sqlString = `SELECT userLevel FROM dbo.users WHERE (userId =@userId) AND (userKey = @userKey)
AND (sessionKey = @sessionKey) and (plId = @plId)`
let request = new sql.Request();
request.input('userId', sql.Int, userId);
request.input('userKey', sql.NVarChar, userKey);
request.input('sessionKey', sql.NVarChar, sessionKey);
request.input('plId', sql.Int, plId);
request.query(sqlString, function (err, results) {
if (err) { msg.success = "0"; msg.message = "ERR_07: Could not connect to server."; res.json(msg); return; };
if (results.rowsAffected[0] != 0) {
response.validated = true;
if (results.recordset[0].userLevel == 1 || results.recordset[0].userLevel == 10) {
response.isAdmin = true;
};
if (results.recordset[0].userLevel == 10) {
response.isCorporate = true;
};
return (response);
}
else {
return (response);
};
});
});
};
}
module.exports = { functions };
这基本上是为了验证登录用户是否具有正确的凭据。
从第二个 .js 文件中,我需要此文件:
const utils = require('../utils/utils')
const functions = new utils.functions;
然后,在 router.post 上,我像这样调用 validateUser:
let AuthUser = async () => {
const string = await functions.validateUser(payload.body.credentials.userId, payload.body.credentials.userKey, payload.body.credentials.sessionKey, payload.body.credentials.plId);
return string;
};
let isValid = AuthUser();
console.log(isValid)
但是我没有在控制台上获得预期值,而是得到了
Promise { <pending> }
我尝试使 validateUser 异步,但仍然得到相同的结果。
这个想法是在我获取并处理 validateUser 的结果后继续运行代码
任何帮助将不胜感激。
谢谢。
最佳答案
class functions {
validateUser(userId, userKey, sessionKey, plId) {
return new Promise((resolve, reject) => {
try {
let response = {
validated: false,
isAdmin: false,
isCorporate: false
}
sql.connect(process.env.DB_CONNSTRING, function (err) {
if (err) throw err
let sqlString = `SELECT userLevel FROM dbo.users WHERE (userId =@userId) AND (userKey = @userKey) AND (sessionKey = @sessionKey) and (plId = @plId)`
let request = new sql.Request();
request.input('userId', sql.Int, userId);
request.input('userKey', sql.NVarChar, userKey);
request.input('sessionKey', sql.NVarChar, sessionKey);
request.input('plId', sql.Int, plId);
request.query(sqlString, function (err, results) {
if (err) {
msg.success = "0"; msg.message = "ERR_07: Could not connect to server.";
res.json(msg);
resolve(res)
} else {
if (results.rowsAffected[0] != 0) {
response.validated = true;
if (results.recordset[0].userLevel == 1 || results.recordset[0].userLevel == 10) {
response.isAdmin = true;
};
if (results.recordset[0].userLevel == 10) {
response.isCorporate = true;
};
}
resolve(response)
}
});
});
} catch (err) {
reject(err)
}
})
};
}
let AuthUser = () => {
return new Promise(async (resolve, reject) => {
try {
const string = await functions.validateUser(payload.body.credentials.userId, payload.body.credentials.userKey, payload.body.credentials.sessionKey, payload.body.credentials.plId);
resolve(string)
} catch (err) {
reject(err)
}
})
};
let isValid = await AuthUser();
console.log(isValid)
其控制台。记录尚未完成触发的响应
关于node.js - 在另一个 .JS 文件的类中异步调用 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68324713/