ReferenceError:用户没有定义
这是一个非常具体的问题,但我真的不知道是什么导致了错误。 我有以下代码:
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(mongoose模型)
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); }
经过一些更多的testing后自己把它弄出来。 我补充说
const Users =
在前面
module.exports = mongoose.model('User', UsersSchema);
所以现在是
const Users = module.exports = mongoose.model('User', UsersSchema);
它现在完美的工作。 还要感谢@Yury Tarabanko在评论中的build议。