【问题标题】:ReferenceError: Users is not definedReferenceError:未定义用户
【发布时间】:2018-02-14 23:50:22
【问题描述】:

这是一个非常具体的问题,但我真的不知道是什么导致了错误。我有以下代码:

router.get('/user/profile', passport.authenticate('jwt', { session: false }), function(req, res, next){
// Something
});

当我访问路由时,它会通过我的 passport-jwt 代码,其中包含我在用户模型中定义的自定义 getUserById() 函数

let opts = {};
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderWithScheme('jwt');
opts.secretOrKey = config.secret;
passport.use(new JwtStrategy(opts, function(jwt_payload, done){
    Users.getUserById(jwt_payload._id, function(err, user){
        if(err){
            return done(err, false);
        }

        if(user){
            return done(null, user);
        } else {
            return done(null, false);
        }
    });
}));

getUserById()

module.exports.getUserById = function(id, callback){
    Users.findById(id, callback);
}

当我访问路由时,我的服务器出现以下错误:

ReferenceError: Users is not defined
    at Function.module.exports.getUserById (E:\Projects\CSGOOrb\models\users.js:55:2)
    at JwtStrategy._verify (E:\Projects\CSGOOrb\config\passport.js:18:9)
    at E:\Projects\CSGOOrb\node_modules\passport-jwt\lib\strategy.js:123:34
    at E:\Projects\CSGOOrb\node_modules\jsonwebtoken\verify.js:27:18
    at _combinedTickCallback (internal/process/next_tick.js:131:7)
    at process._tickCallback (internal/process/next_tick.js:180:9)

我在所有使用它的文件中都需要我的用户模型。有谁知道还有什么可能导致它?

编辑:

passport.js

const colors = require('colors/safe');
const Users = require('../models/users');
const config = require('../config/database');

const jwt = require('jsonwebtoken');
const JwtStrategy = require('passport-jwt').Strategy;
const ExtractJwt = require('passport-jwt').ExtractJwt;
const SteamStrategy = require('passport-steam').Strategy;

module.exports = function(passport){

    let opts = {};
    opts.jwtFromRequest = ExtractJwt.fromAuthHeaderWithScheme('jwt');
    opts.secretOrKey = config.secret;
    passport.use(new JwtStrategy(opts, function(jwt_payload, done){
        Users.getUserById(jwt_payload._id, function(err, user){
            if(err){
                return done(err, false);
            }

            if(user){
                return done(null, user);
            } else {
                return done(null, false);
            }
        });
    }));
...

users.js(猫鼬模型)

const mongoose = require('mongoose');
const config = require('../config/database');

// Users Schema
const UsersSchema = mongoose.Schema(
    {
        admin: {
            type: Boolean,
            default: false
        },
        mod: {
            type: Boolean,
            default: false
        },
        user: {
            type: Boolean,
            default: true
        },
        steam: {
            id: {
                type: String
            },
            identifier: {
                type: String
            },
            name: {
                type: String
            },
            avatar: {
                type: String
            },
            avatarmedium: {
                type: String
            },
            avatarfull: {
                type: String
            },
            tradelink: {
                type: String
            }
        }
    },
    {
        timestamps: 
        { 
            createdAt: 'created_at',
            updatedAt: 'updated_at' 
        }
    }
    );

const Users = module.exports = mongoose.model('User', UsersSchema);

module.exports.getUserById = function(id, callback){
    Users.findById(id, callback);
}

module.exports.getUserById64 = function(id, callback){
    const query = {id: steam.id};
    Users.findOne(query, callback);
}

【问题讨论】:

  • 那么用户定义了吗?
  • 我编辑了我的原始帖子并包含了passport.js,这是我配置护照的文件。用户在顶部定义。如果您需要更多,请告诉我
  • 您是否尝试过导出Users 对象并添加getUserById 作为原型方法?
  • 您在定义getUserById 的文件中是否需要Users?你好像没有
  • @YuryTarabanko 我在用户模型文件中定义了函数:)

标签: javascript node.js jwt passport.js


【解决方案1】:

经过更多测试后自己想通了。我加了

const Users = 

前面

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

现在是

const Users = module.exports = mongoose.model('User', UsersSchema);

现在完美运行。还要非常感谢 @Yury Tarabanko 在 cmets 中的建议。

【讨论】:

  • 非常有价值的答案!文档对 js 来说有多糟糕,真是太疯狂了。学的时候什么都找不到。
猜你喜欢
  • 1970-01-01
  • 2021-04-16
  • 2012-08-24
  • 1970-01-01
  • 1970-01-01
  • 2021-08-08
  • 2014-04-27
  • 1970-01-01
相关资源
最近更新 更多