Node.js 使用Express.js连接到SQL Server
我正在编写从express.js连接到SQL Server的代码。一切正常,但我想在函数末尾返回错误。我声明了全局变量,如果有错误,我会将错误分配给该变量,并在最后返回。但我仍然没有定义变量值。请有人帮我做这件事 代码如下:Node.js 使用Express.js连接到SQL Server,node.js,sql-server,express,Node.js,Sql Server,Express,我正在编写从express.js连接到SQL Server的代码。一切正常,但我想在函数末尾返回错误。我声明了全局变量,如果有错误,我会将错误分配给该变量,并在最后返回。但我仍然没有定义变量值。请有人帮我做这件事 代码如下: async function mysqlConnection(userParam) { var config = { user: userParam.connectionUsername, password: userParam.connectionP
async function mysqlConnection(userParam) {
var config = {
user: userParam.connectionUsername,
password: userParam.connectionPassword,
server: userParam.hostname,
database: userParam.databaseAccount,
};
var msg
let connection=sql.connect(config, function (err) {
if (err) {
console.log(err.message);
msg=err.message // return err;
} else {
console.log("Done");
}
return msg
});
console.log(msg)
return msg
}
我也试过这个
async function mysqlConnection(userParam) {
var config = {
user: userParam.connectionUsername,
password: userParam.connectionPassword,
server: userParam.hostname,
database: userParam.databaseAccount,
};
var msg
try {
let connection=await sql.connect(config);
return msg; // undefined
} catch (err) {
console.log(err.message);
msg = err.message;
return msg;
}
}
这里的msg
是一个全局变量,我在if条件中赋值,我在函数结束前返回该变量,但如果连接失败,我得到的是未定义的,而不是错误消息,但在if条件中我得到的是错误消息。请有人能提出解决方案吗
谢谢您正在使用回调函数连接到SQL Server。这两条线:
console.log(msg)
return msg
在回调函数中的代码之前执行
if (err) {
console.log(err.message);
msg=err.message // return err;
} else {
console.log("Done");
}
return msg
因此,变量msg
未定义
我的建议是:尽可能避免回调,搜索相同的函数,但使用Promise或async/await样式而不是回调。然后,您可以将代码重写为:
var msg
try {
let connection=await sql.connectAsync(config);
return msg; // undefined
} catch (err) {
console.log(err.message);
msg = err.message;
return msg;
}
这些文章可以帮助您更好地理解:
var msg;
try {
let connection=await sql.connect(config);
console.log("Connect to database success");
// the msg variable is undefined here because we haven't assigned any value to it
// so it's normal
return "Connect to database success";
} catch (err) {
console.log("Error when connecting to database");
console.log(err); // not sure if err.message is defined.
// You should look into the err variable to check that
return "Error"; // we can return our custom message, or `err.message` if it present in err object
}
最后,您甚至不需要msg变量,而是使用回调函数连接到SQL Server。这两条线:
console.log(msg)
return msg
在回调函数中的代码之前执行
if (err) {
console.log(err.message);
msg=err.message // return err;
} else {
console.log("Done");
}
return msg
因此,变量msg
未定义
我的建议是:尽可能避免回调,搜索相同的函数,但使用Promise或async/await样式而不是回调。然后,您可以将代码重写为:
var msg
try {
let connection=await sql.connectAsync(config);
return msg; // undefined
} catch (err) {
console.log(err.message);
msg = err.message;
return msg;
}
这些文章可以帮助您更好地理解:
var msg;
try {
let connection=await sql.connect(config);
console.log("Connect to database success");
// the msg variable is undefined here because we haven't assigned any value to it
// so it's normal
return "Connect to database success";
} catch (err) {
console.log("Error when connecting to database");
console.log(err); // not sure if err.message is defined.
// You should look into the err variable to check that
return "Error"; // we can return our custom message, or `err.message` if it present in err object
}
最后,您甚至不需要msg变量我尝试了这个方法,但只是有时候它会重新调整msg值,但在它显示未定义后会再次使用。请帮助我,我编辑了我的答案,添加了更多详细信息。希望有帮助我尝试过这个,但只是有时它会重新调整msg值,但在它显示未定义后,请帮助我。我编辑了我的答案,添加了更多细节。希望能有所帮助