2012-05-31 4 views
2
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#에서와 같이 동 기적으로 작동하도록 만드는 방법을 알려줄 수 있습니까?Nodejs를 동기식으로 호출하는 방법을 쉽게 사용할 수 있습니까?

+5

NodeJS를 사용하려면 비동기 코드 작성법을 배우는 것이 좋습니다. 'CheckUserValid' 함수는 콜백을 받아들입니다. 왜 사용하지 않을까요? –

답변

4

메서드의 서명은 이미 callback을 의미하므로 res.send(ret);을 콜백으로 사용할 수 있습니다. 당신은 DB-요청이 다음과 같이 수행 될 때 뭔가를 호출 할 수 있습니다 : 관례

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) 
    } 
    }); 
} 

당신은 그러나 당신에게 달려 결국, 첫 번째 인수로 err을 통과해야한다. 그러나 원래 함수를 원래 함수로 전달하여 처리 할 수 ​​있습니다.

1

당신은 당신이 순서

예에서 호출 할 기능을 체인 수 CheckUserValid

관련 문제