防止在NodeJS上双重运行

我在我的nodejs应用程序的路由中有以下,但它每次运行两次,并尝试发送这两个文件。 如何阻止它运行两次。

app.get('/', function(req, res){ data = validate(req.cookies.user,req.cookies.code,function(data) { if (data == 'false'){ console.log('send to login'); res.sendFile(__dirname + '/views/login.html'); } else { console.log('send to chat'); res.sendFile(__dirname + '/views/chat.html'); } console.log('USER DATA'+data); }); }); 

首先运行正常,需要停在那里。 但它会自动运行第二次,并未定义结果。

它调用以下function,这是一个正在进行的工作。

  function validate (user, code, callback) { con.query( "SELECT * FROM tbl_users WHERE id = "+con.escape(user)+" and code = "+con.escape(code), function(err,results) { console.log('Validation Access'); console.log('User: '+user+' Code: '+code); for (row in results) { data = results[row]; console.log('Userdata: '+data); if(data.id) { console.log('Account Found'); callback(data); } } console.log('Not Found'); callback('false'); } ); } 

logging的terminal输出是

 Express server listening on port 3000 Validation Access User: 1 Code: 0 Userdata: [object Object] Account Found send to chat USER DATA[object Object] Not Found send to login USER DATAfalse 

在看其他职位,没有工作的答案

问题是你的查询处理程序总是调用callback('false'); 即使该帐户被find。 解决这个问题最简单的方法是在内部callback之后插入一个return语句,如下所示:

  for (row in results) { data = results[row]; console.log('Userdata: '+data); if(data.id) { console.log('Account Found'); callback(data); return; // prevent second callback } } console.log('Not Found'); callback('false');