简体   繁体   English

在Node JS中获取Promise错误

[英]Getting promise error in node js

Server js: 服务器js:

var user_controller = require('./controllers/user_controller');
passport.use(new passportLocal(function(username, password, done) {
  user_controller.login(username, password).then(function(value) {
    if (value) {
      console.log(value + "true")

      done(null, {
        id: username,
        name: username
      });
    } else {
      console.log(value + "false");
      done(null, null);
    }
  })
}));

USer contoller: 用户控制器:

module.exports.login = function(username, password) {
  var status;
  var userid = username;
  User.findOne({
    'username': [userid],
    'password': [password]
  }, function(err, user) {
    if (!user) {
      console.log("logged err");
      status = false;
    } else {
      console.log("login in");
      status = true;
    }
    console.log(status);
    return status;
  });
};

I am doing an async task (db call) in my user_controller.login and it returns a boolean "value" 我在user_controller.login中执行异步任务(db调用),并且返回布尔“值”

But when I execute this I am getting error:Cannot read property 'then' of undefined 但是当我执行此操作时,我收到错误消息:无法读取未定义的属性“ then”

I saw previous questions on this error but couldnt understand it 我看到了有关此错误的先前问题,但无法理解

I think you can try with callback function. 我认为您可以尝试使用回调函数。 The login function takes one callback param and execute that function at end. login函数接受一个回调参数,并在最后执行该函数。

module.exports.login = function(username, password, callback) {
  var status;
  var userid = username;
  User.findOne({
    'username': [userid],
    'password': [password]
  }, function(err, user) {
    if (!user) {
      console.log("logged err");
      status = false;
    } else {
      console.log("login in");
      status = true;
    }
    console.log(status);
    callback(status);
  });
};

While calling the function login pass the third param as a callback function. 调用函数登录时,将第三个参数作为回调函数传递。

var user_controller = require('./controllers/user_controller');
passport.use(new passportLocal(function(username, password, done) {
  user_controller.login(username, password, function(value) {
    if (value) {
      console.log(value + "true")

      done(null, {
        id: username,
        name: username
      });
    } else {
      console.log(value + "false");
      done(null, null);
    }
  })
}));

Note: I am not tested the above code. 注意:我没有测试上面的代码。

You can create promise based functions in Nodejs using Q library. 您可以使用Q库在Node.js中创建基于Promise的函数。

npm install q

Below code can help you. 以下代码可以为您提供帮助。

module.exports.login=function(username,password){
var status;
var userid=username;

User.findOne({'username':[userid], 'password':[password]},function(err,user){
    var deferred = Q.defer();

    if(err){
       deferred.reject(err); 
    } else{
        deferred.resolve(data);
    }
    return deferred.promise;
});

and use it in Server.js 并在Server.js中使用

var user_controller = require('./controllers/user_controller');
passport.use(new passportLocal(function(username, password, done) {
user_controller.login(username, password).then(function(user) {
  done(null, {
    id: username,
    name: username
  });
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM