Вызов хранимой процедуры из узла js - PullRequest
0 голосов
/ 05 июня 2018

Я использую экспресс и пытаюсь вызвать хранимую процедуру LoginMember с портала Azure.Это моя форма, взятая из 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 голосов
/ 05 июня 2018

Убедитесь, что вы закрываете sql-соединение после выполнения запроса или сбоя. Что я обнаружил в вашем коде, так это то, что вы закрываете sql-соединение за пределами sql.connect, что неверно, поскольку узел 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);

    });
  });
});

Надеюсь, это поможет.

...