首页 > 解决方案 > 您好,我一直在尝试为正在使用护照本地猫鼬构建的应用程序设置用户身份验证并面临此错误

问题描述

我一直在尝试使用passport-local-mongoose. 当我运行下面抛出此错误的代码时,我的应用程序崩溃:
MissingSchemaError: Schema hasn't been registered for model "../models/User.js".

这是我的 passport.js 文件

const mongoose = require('mongoose');
// const passport = require('passport');
// const LocalStrategy = require('passport-local');

const User = mongoose.model('../models/User.js');

passport.use(new LocalStrategy({
      usernameField: "email",
      passwordField: "password"
   },
   User.authenticate()
));

passport.serializeUser(function(user, done){
   done(null, user.id);
});

passport.deserializeUser(function(id, done){
   User.findById(id, function(err, user){
      done(err, user);
   });
});

这是我的 User.js 文件

const mongoose = require("mongoose");
const passportLocalMongoose = require('passport-local-mongoose');
const Schema = mongoose.Schema;

const RegisteredUsers = new Schema({
   firstName: String,
   lastName: String,
   email: String,
   phone: Number,
   password: String,
   skill: {
      type: String,
      required: [true],
      enum: {
         values: ['developer', 'designer', 'recruitor', "other"],
      }
   },
   specify: String
});

RegisteredUsers.plugin(passportLocalMongoose);

const User = mongoose.model("User", RegisteredUsers);

module.exports = User

这是我的用户路线

const mongoose = require("mongoose");
const passportLocalMongoose = require('passport-local-mongoose');
const Schema = mongoose.Schema;

const RegisteredUsers = new Schema({
   firstName: String,
   lastName: String,
   email: String,
   phone: Number,
   password: String,
   skill: {
      type: String,
      required: [true],
      enum: {
         values: ['developer', 'designer', 'recruitor', "other"],
      }
   },
   specify: String
});

RegisteredUsers.plugin(passportLocalMongoose);

const User = mongoose.model("User", RegisteredUsers);

module.exports = User

这是我的 app.js

const mongoose = require("mongoose");
const passportLocalMongoose = require('passport-local-mongoose');
const Schema = mongoose.Schema;

const RegisteredUsers = new Schema({
   firstName: String,
   lastName: String,
   email: String,
   phone: Number,
   password: String,
   skill: {
      type: String,
      required: [true],
      enum: {
         values: ['developer', 'designer', 'recruitor', "other"],
      }
   },
   specify: String
});


RegisteredUsers.plugin(passportLocalMongoose);

const User = mongoose.model("User", RegisteredUsers);

module.exports = User

这是运行代码后出现的错误。

    C:\Users\TicqxKid\Desktop\Officium_App\Backend-Beta\node_modules\mongoose\lib\index.js:526
          throw new mongoose.Error.MissingSchemaError(name);
          ^

    MissingSchemaError: Schema hasn't been registered for model "../models/User.js".
    Use mongoose.model(name, schema)
        at Mongoose.model (C:\Users\TicqxKid\Desktop\Officium_App\Backend-Beta\node_modules\mongoose\lib\index.js:526:13)
        at Object.<anonymous> (C:\Users\TicqxKid\Desktop\Officium_App\Backend-Beta\config\passport.js:5:23)
        at Module._compile (internal/modules/cjs/loader.js:1015:30)
        at Object.Module._extensions..js (internal/modules/cjs/loader.js:1035:10)
        at Module.load (internal/modules/cjs/loader.js:879:32)
        at Function.Module._load (internal/modules/cjs/loader.js:724:14)
        at Module.require (internal/modules/cjs/loader.js:903:19)
        at require (internal/modules/cjs/helpers.js:74:18)
        at Object.<anonymous> (C:\Users\TicqxKid\Desktop\Officium_App\Backend-Beta\app.js:13:1)
        at Module._compile (internal/modules/cjs/loader.js:1015:30)
        at Object.Module._extensions..js (internal/modules/cjs/loader.js:1035:10)
        at Module.load (internal/modules/cjs/loader.js:879:32)
        at Function.Module._load (internal/modules/cjs/loader.js:724:14)
        at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12)
        at internal/main/run_main_module.js:17:47
    [nodemon] app crashed - waiting for file changes before starting...

请帮我解决这个问题。

标签: node.jspassport-local-mongoose

解决方案


推荐阅读