2017-09-06 14 views
1

これは非常に具体的な質問ですが、実際に何が原因でエラーが発生しているのか分かりません。ReferenceError:ユーザーが定義されていません

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

私はそれが私のカスタムgetUserById()関数が含まれて私のパスポート、JWTコードを通過するルートにアクセスすると、それはユーザーモデルで定義されている

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) 

私はそれを利用するすべてのファイルに自分のユーザーモデルを必要としています。誰もがそれを引き起こす可能性があることを知っていますか?

EDIT:

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); 
} 
+1

ユーザーは定義されていますか? – Keith

+0

オリジナルの投稿を編集してpassport.jsを追加しました。これはパスポートを設定するファイルです。ユーザーは一番上に定義されています。もっと必要な場合は教えてください – DerJP

+0

'Users'オブジェクトをエクスポートし、' getUserById'をプロトタイプメソッドとして追加しようとしましたか? – lumio

答えて

0

は、いくつかのより多くのテストの後に自分自身をそれを考え出しました。私は今、それはそれは今完璧に動作

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

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

の前で

const Users = 

を追加しました。 @ Yury Tarabankoにも感謝の意を表します。

関連する問題