3
app.post('/login', function (req, res) {

    var login = req.body.login;
    var pass = req.body.pass;

    var ret = CheckUserValid(login, pass);

  res.send(ret);
})

function CheckUserValid(login, pass,callback) {
    var sql = "SELECT * FROM `user` WHERE login = ? AND pass= ?";
    client.query(sql, [login, pass], function selectResutl(err, results, fields) {
         console.log(results);
        if (!err) return true;
        else
            throw err;
    });
}

第一个函数是关于请求的,第二个函数是关于调用 mysql 的。因为它是异步的,所以它不起作用。有人可以让我知道如何使它像在 C# 中一样同步工作。

4

3 回答 3

4

您的方法的签名CheckUserValid已经暗示了一个callback. 当您的 db-request 完成时,您可以使用它来调用某些东西,如下所示:

app.post('/login', function (req, res) {
  var login = req.body.login;
  var pass  = req.body.pass;

  // use a closure here for the callback of checkUserValid
  checkUserValid(login, pass, function(err, isValid) {
    // send the response when checkUserValid is done
    res.send(isValid)
  });
})

function checkUserValid(login, pass, callback) {
  var sql = "SELECT * FROM `user` WHERE login = ? AND pass= ?";
  client.query(sql, [login, pass], function(err, results, fields) {
    console.log(results);
    if (!err) {
      // there is no error, pass null for the error
      // and true for the result
      callback(null, true);
    } else {
      // an error occurred in the db-query
      // pass it to the callback
      callback(err)
    }
  });
}

按照惯例,您应该传递erras 第一个参数,但最终由您决定。但是,您可以将原始错误传递给您的初始函数并在那里处理它。

于 2012-05-31T20:30:48.187 回答
3

你应该看看Fibers模块。

于 2012-06-01T13:07:28.403 回答
1

您可以按顺序链接要调用的函数

例如,您可以res.send(ret);作为您的回调CheckUserValid

于 2012-05-31T20:22:48.460 回答