从节点js

时间:2018-06-05 09:50:35

标签: sql-server node.js express stored-procedures ejs

我正在使用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.

控制台不会返回任何其他错误。 我知道这可能不是我可以使用的最佳解决方案,但这是我的方法,我想让它发挥作用。

1 个答案:

答案 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
  }
}

我希望它有所帮助。