Node.js“UserLogged”函数返回“未定义”。为什么?

Node.js“UserLogged”函数返回“未定义”。为什么?

当我到达下面代码的末尾时,它总是返回“未定义”,我不知道为什么!

function UserLogged (session) {
  if (session === null) {
    var err = new Error('Not logged in');
    err.status = 400;
    return {user : null, err : err};
  }
  User.findById(session.userId)
  .exec(function (error, user) {
    if (error) {
      return {user : null, err : error};
    }
    else {
      if (user === null) {
        var err = new Error('Not authorized!');
        err.status = 400;
        return {user : null, err : err};
      }
      else {
        console.log("User found and ok!");
        return {user : user, err : null};
      }
    }
  });
}

它确实在控制台上记录了“用户找到并且确定!”,但仍然返回“未定义”

答案1

看起来您正尝试从回调函数内部返回某些内容。JavaScript 基本上异步执行 I/O 操作。内部声明的函数.exec()是此处的回调函数。

我发现此链接对于理解异步编码很有用。 https://blog.risingstack.com/node-hero-async-programming-in-node-js/

您可以更改与此类似的代码以使其正常工作

function UserLogged (session, callback) {
  if (session === null) {
    var err = new Error('Not logged in');
    err.status = 400;
    return callback(err);
  }
  User.findById(session.userId)
  .exec(function (error, user) {
    if (error) {
      return callback(error);
    }
    else {
      if (user === null) {
        var err = new Error('Not authorized!');
        err.status = 400;
        return callback(err);
      } else {
        console.log("User found and ok!");
        callback(null, user);
      }
    }
  });
}

回调参数应该是类似于此的函数

UserLogged(session, function(err, user) {
  console.log(err);
  console.log(user);
})

将“err”作为回调函数的第一个参数传递是nodejs的标准。

希望这对你有帮助:D

相关内容