我正在使用express,我试图从Azure门户调用LoginMember存储过程。这是我的表格,来自ejs:
<form method="post" action="/available-copies">
<input type="text" placeholder="SSN" name="userssn">
<input type="password" placeholder="Password" name="userpassword">
<input type="submit" value="Login">
</form>
这是我的帖子请求
router.post('/available-copies', function (req, res) {
var ssn = req.body.userssn;
var password = req.body.userpassword;
sql.connect(sqlConfig, function (err) {
if (err) console.log(err);
// create Request object
var request = new sql.Request();
// query to the database and execute procedure
request.query("exec LoginMember @SSN='"+ssn+"', @PASSWORD='"+password+"';", function (err, recordset) {
if (err) console.log(err);
res.send(recordset);
});
});
sql.close()
});
SqlConfig来自另一个文件,这部分很好。以防万一,这是我的存储过程创建代码:
CREATE PROCEDURE LoginMember @SSN varchar(11), @PASSWORD char(64)
AS
BEGIN
Select * from Member
WHERE Member.ssn = @SSN AND Member.password = @PASSWORD
END
会发生什么 - 当我提交表单时,页面会持续加载3-5分钟,之后我会
This page isn’t working
localhost didn’t send any data.
控制台不会返回任何其他错误。 我知道这可能不是我可以使用的最佳解决方案,但这是我的方法,我想让它发挥作用。
答案 0 :(得分:3)
确保在查询执行或失败后关闭sql连接。我在你的代码中发现你正在关闭sql.connect之外的sql连接这是不正确的,因为节点js本质上是异步的,这在完成之前就会终止你的连接。请在下面找到更新代码:
defaultConfig {
applicationId 'com.example.app.android'
minSdkVersion 16
targetSdkVersion 24
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled true
dexOptions {
preDexLibraries true
javaMaxHeapSize '6g'
incremental true
}
}
我希望它有所帮助。