【问题标题】:Nodejs : passport-local-mongoose's .plugin(...) doesn't do anythingNodejs:passport-local-mongoose 的 .plugin(...) 没有做任何事情
【发布时间】:2017-12-09 19:55:45
【问题描述】:

我正在尝试使用 passport-local-mongoose 在我的 MongoDB 数据库中注册用户。然而,它似乎没有做它应该做的事情。

型号:

var userSchema = new mongoose.Schema({
    email: {
        type: String,
        ...
    },
});

userSchema.plugin(passportLocalMongoose, {usernameField: 'email'});

userSchema.statics = {
    ...
}

userSchema.methods = {
    ...
}

var User = mongoose.model('User', userSchema);
module.exports = User;

控制器:

exports.registerAction = async (req, res, next) => {
    const user = new User({ email: req.body.email });
    User.register(user, req.body.password, function() {
        res.send('It works!');
    });

据我了解,Passport 应该在 User 上实现 register 方法,但这里 User.register 仍然是 undefined

我做错了什么?

【问题讨论】:

    标签: node.js mongoose passport.js passport-local


    【解决方案1】:

    我自己找到了解决办法。

    userSchema.plugin(...) 调用必须在定义userSchema.statics = {…}userSchema.methods = {…} 之后进行。

    我猜.plugin(...) 尝试使用staticsmethods 属性(或两者),并将它们初始化为新对象。然后,当我们调用userSchema.statics = {…}(或methods)时,它只会删除.plugin(...) 所创建的内容。

    【讨论】:

    • 这就是userSchema.statics = {} 所做的:它将一个新对象分配给statics 属性(并且先前的对象,包括插件添加的部分,将被取消引用)。您也可以使用userSchema.statics.myStaticMethod = ... 来防止这种情况发生。
    • 是的,我只是没有意识到plugin(...) 正在设置staticsmethods 的属性……我从未在任何地方看到明确说明。谢谢你的建议。我也在寻找一种方法来扩展对象而不覆盖它,而不是为每个函数重复 userSchema.statics,但我找不到正确的语法。
    • Object.assign(userSchema.statics, { ... }) 可能也可以。
    猜你喜欢
    • 2018-07-05
    • 2012-09-07
    • 2016-10-02
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多