0

この関数 check_auth は常に未定義を返しますか? Cookie は問題ありません。結果は問題ありません。問題は非同期呼び出しである可能性があります。そうであれば、どうすれば修正できますか? 機能が満たされない場合は接続しません

 function check_auth(req,res){
var cookie=check_cookie(req);
var check_result_ret;
  if(cookie){ 
      console.log("exist cookie: "+cookie);
      var sql    = 'SELECT session_id,username,id FROM session WHERE session_id = ' + connection.escape(cookie);
      connection.query(sql, function(err, results) {
          if (err) throw err;
if (results.length  > 0 && results[0]['session_id'] ==cookie) {
 users[results[0]['session_id']]={username:results[0]["username"],id:results[0]["id"]};
check_result_ret=1;
}else{
             check_result_ret=0;
           }
                  });

}else{
       check_result_ret=0;
  }
 return check_result_ret;
}

サーバーノード部分

switch (path) {
case '/':
var test=check_auth(request,response);
console.log("result",test);
if(test==1){    
fs.readFile("main.html", 'utf-8', function (error, data) {
 //make somthing
});
}else{
    send404(response);  
}
break; etc....
4

1 に答える 1

1

問題は、 のコールバックが呼び出される前にcheck_auth戻ることです。check_result_retfunction(err, results)connection.query

非同期プログラミングがどのように機能するかについてもっと読む必要があると思います

たぶんこれが役立つ、

check_auth(req,res){
...do stuff
  connection.query(sql, function(err, results) {
    if (err) throw err;
    if (results.length  > 0 && results[0]['session_id'] ==cookie) {
      users[results[0]['session_id']]={username:results[0]["username"],id:results[0["id"]};
      check_result_ret=1;
    }
    else{
      check_result_ret=0;
    }
   var test = check_result_ret;
   if(test==1){    
     fs.readFile("main.html", 'utf-8', function (error, data) {
             //make somthing afer reading the file
             anotherAsyncCall(input,options,function(output){
                //do something with output 
             });
     });
   }
   else{
    send404(response);  
   }
})
于 2013-08-31T18:34:09.007 に答える