Node.js NodeJS返回数据
我有以下代码没有正确返回数据Node.js NodeJS返回数据,node.js,undefined,Node.js,Undefined,我有以下代码没有正确返回数据 app.post('/login',function(req,res){ sess=req.session; var au = authme(req.body.name,req.body.pass, function(err,data) { if(err) { return 'error'; } console.log(data);
app.post('/login',function(req,res){
sess=req.session;
var au = authme(req.body.name,req.body.pass, function(err,data) {
if(err) {
return 'error';
}
console.log(data);
return data;
});
if(au) {
sess.username = au.name;
}
res.end('done');
});
数据一直传递到console.log(Data);但是当我尝试在au语句中使用in时,它返回未定义。这是典型的异步问题
authme
是异步运行的,因此代码不是简单地从上到下运行
var au = authme(req.body.name,req.body.pass, function(err,data) {
console.log('I am second!')
});
console.log('I am first!')
您需要稍微重新构造代码以获得所需的行为
app.post('/login',function (req,res) {
authme(req.body.name,req.body.pass, function(err, data) {
if (err) {
return 'error';
}
if (data) {
req.session.username = data.name;
}
res.end('done');
});
});
这是典型的异步问题
authme
是异步运行的,因此代码不是简单地从上到下运行
var au = authme(req.body.name,req.body.pass, function(err,data) {
console.log('I am second!')
});
console.log('I am first!')
您需要稍微重新构造代码以获得所需的行为
app.post('/login',function (req,res) {
authme(req.body.name,req.body.pass, function(err, data) {
if (err) {
return 'error';
}
if (data) {
req.session.username = data.name;
}
res.end('done');
});
});
对
authme
的函数调用可能是异步的。将if
语句放在函数调用的回调中,以确保在异步函数完成执行后始终对其进行验证
app.post('/login',function(req,res){
sess=req.session;
(authme(req.body.name,req.body.pass, function(err,data) {
if(err) {
return 'error';
}
console.log(data);
if(data) {
sess.username = au.name;
}
}))();
res.end('done');
});
对
authme
的函数调用可能是异步的。将if
语句放在函数调用的回调中,以确保在异步函数完成执行后始终对其进行验证
app.post('/login',function(req,res){
sess=req.session;
(authme(req.body.name,req.body.pass, function(err,data) {
if(err) {
return 'error';
}
console.log(data);
if(data) {
sess.username = au.name;
}
}))();
res.end('done');
});
在Nodejs中,操作是异步的——简言之,这意味着结果将在以后解析,您不知道在代码执行过程中,不等待它的确切时间。处理此类调用的方法是回调。更多关于这个话题的信息 所以用你的代码你就落入了经典的陷阱。这部分代码
var au = authme(req.body.name,req.body.pass, function(err,data) {
if(err) {
return 'error';
}
console.log(data);
return data;
});
是一个异步调用,这意味着
function(err,data) {
if(err) {
return 'error';
}
console.log(data);
return data;
}
是一个回调,仅在获得结果时运行。而这部分
if(au) {
sess.username = au.name;
}
在var au=authme(req.body.name,req.body.pass)
完成后立即执行。
到那一刻,没有任何au
被解析,这就是为什么会出现这个错误
在您的情况下,您应该将au check放入回调:
authme(req.body.name,req.body.pass, function(err,data) {
if(err) {
return 'error';
}
if(au) {
req.session.username = au.name;
}
res.end('done');
});
在Nodejs中,操作是异步的——简言之,这意味着结果将在以后解析,您不知道在代码执行过程中,不等待它的确切时间。处理此类调用的方法是回调。更多关于这个话题的信息 所以用你的代码你就落入了经典的陷阱。这部分代码
var au = authme(req.body.name,req.body.pass, function(err,data) {
if(err) {
return 'error';
}
console.log(data);
return data;
});
是一个异步调用,这意味着
function(err,data) {
if(err) {
return 'error';
}
console.log(data);
return data;
}
是一个回调,仅在获得结果时运行。而这部分
if(au) {
sess.username = au.name;
}
在var au=authme(req.body.name,req.body.pass)
完成后立即执行。
到那一刻,没有任何au
被解析,这就是为什么会出现这个错误
在您的情况下,您应该将au check放入回调:
authme(req.body.name,req.body.pass, function(err,data) {
if(err) {
return 'error';
}
if(au) {
req.session.username = au.name;
}
res.end('done');
});
可能重复可能重复