Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 类型错误:对象#<;策略>;没有方法';findByUsername';_Node.js_Passport.js - Fatal编程技术网

Node.js 类型错误:对象#<;策略>;没有方法';findByUsername';

Node.js 类型错误:对象#<;策略>;没有方法';findByUsername';,node.js,passport.js,Node.js,Passport.js,我正在尝试使用passport local,如下所示: users.js: var Users = function() {} Users.prototype.findByUsername = function(username, cb) { var user = { name: username }; cb(null, user); }; Users.prototype.verify = function(username, password, done) { this

我正在尝试使用
passport local
,如下所示:

users.js:

var Users = function() {}
Users.prototype.findByUsername = function(username, cb) {
    var user = { name: username };
    cb(null, user);
};
Users.prototype.verify = function(username, password, done) {
    this.findByUsername(username, function(err, user) {
        done(null, user);
    });
};

module.exports = Users;
在app.js的中:

var Users = require('./users');
var users = new Users();

passport.use(new LocalStrategy(users.verify));
当我尝试登录时,我得到
TypeError:Object#没有方法“findByUsername”

我不熟悉Javascript(和node.js),但我做了一些搜索,我认为我正确地使用了构造函数模式

那么为什么将
设置为
策略的一个实例,而不是
用户的一个实例呢?

passport.use(new LocalStrategy(users.verify));
您正在将函数传递给LocalStrategy,LocalStrategy会更改其上下文(函数是JavaScript中的头等公民)<代码>此
不再指向用户对象,而是指向策略。因此,您需要将函数绑定到用户上下文

有点胡乱猜测的建议:

Users.prototype.verify = function(username, password, done) {
    this.findByUsername(username, function(err, user) {
        done(null, user);
    });
}.bind(Users.prototype);
用“新的LocalStrategy(users.verify.bind(users))”解决了这个问题