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');
    }); 
可能重复可能重复