从节点js调用存储过程

Kel*_*b56 1 sql-server stored-procedures ejs node.js express

我正在使用 Express,并尝试从 Azure 门户调用 LoginMember 存储过程。这是我的表格,取自 ejs:

\n\n
<form method="post" action="/available-copies">\n      <input type="text" placeholder="SSN" name="userssn">\n      <input type="password" placeholder="Password" name="userpassword">\n      <input type="submit" value="Login">\n</form>\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是我的帖子请求

\n\n
router.post(\'/available-copies\', function (req, res) {\n    var ssn = req.body.userssn;\n    var password = req.body.userpassword;\n\n    sql.connect(sqlConfig, function (err) {\n        if (err) console.log(err);\n        // create Request object\n        var request = new sql.Request();\n        // query to the database and execute procedure\n        request.query("exec LoginMember @SSN=\'"+ssn+"\', @PASSWORD=\'"+password+"\';", function (err, recordset) {\n            if (err) console.log(err);\n\n            res.send(recordset);\n        });\n    });\n    sql.close()\n});\n
Run Code Online (Sandbox Code Playgroud)\n\n

SqlConfig 来自另一个文件,这部分没问题。以防万一,这是我的存储过程创建代码:

\n\n
CREATE PROCEDURE LoginMember @SSN varchar(11), @PASSWORD char(64)\nAS\nBEGIN\n   Select * from Member\n   WHERE Member.ssn = @SSN AND Member.password = @PASSWORD\nEND\n
Run Code Online (Sandbox Code Playgroud)\n\n

发生了什么 - 当我提交表单时,页面持续加载 3-5 分钟,之后我得到

\n\n
This page isn\xe2\x80\x99t working\nlocalhost didn\xe2\x80\x99t send any data.\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n

DHI*_*KAR 5

确保您在查询执行或失败后关闭 sql 连接。我在代码中发现您正在 sql.connect 之外关闭 sql 连接,这是不正确的,因为节点 js 本质上是异步的,这会在完成之前终止您的连接。请查找更新代码如下:

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 
    let query = "exec LoginMember @SSN='" + ssn + "', @PASSWORD='" + password + "';";
    console.log(query)
    request.query(query, function (err, recordset) {
        if (err) {
            console.log(err);
            sql.close();
        }
        sql.close();
        res.send(recordset);

    });
  });
});
Run Code Online (Sandbox Code Playgroud)

我希望它有帮助。