node.js - 平均堆栈缺失架构错误 : Schema hasn't been registered for model "User"

标签 node.js mongodb mean-stack

我已经尝试了许多关于堆栈溢出的解决方案,但在我的情况下没有任何效果...... 这是我的代码... server.js 这是我的应用程序的入口点。

process.env.NODE_ENV = process.env.NODE_ENV || 'development';

var config = require('./config/config'),
    mongoose = require('./config/mongoose'),
    passport = require('./config/passport'),
    express = require('./config/express');
var passport = passport();
var db = mongoose(),
    app = express();

app.listen(config.port);

module.exports = app;
console.log(process.env.NODE_ENV  + ' server running at http://localhost:' + config.port);

我的 config.js 是

module.exports = require('./env/' + process.env.NODE_ENV + '.js');

Mongoos.js

var config = require('./config'),
    mongoose = require('mongoose');

module.exports = function() {
    var db = mongoose.connect(config.db);
    require('../app/models/user.server.model');
    return db;
};

护照.js

var mongoose = require('mongoose');
var passport = require('passport');
var User = mongoose.model('User');

module.exports = function() {

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

    passport.deserializeUser(function(id, done) {
        User.findOne(
            {_id: id},
            '-password',
            function(err, user) {
                done(err, user);
            }
        );
    });

    require('./strategies/local.js')();
};

Express.js

var config = require('./config'),
    express = require('express'),
    bodyParser = require('body-parser'),
    passport = require('passport');



module.exports = function() {
    var app = express();
    var session = require('express-session');


    var flash = require('connect-flash');

    app.use(flash());

    app.use(session({
        saveUninitialized: true,
        resave: true,
        secret: 'OurSuperSecretCookieSecret'
    }));

    app.use(bodyParser.urlencoded({
        extended: true
    }));

    //use this code before any route definitions
    app.use(passport.initialize());
    app.use(passport.session());

    app.use(bodyParser.json());

    app.set('views', './app/views');
    app.set('view engine', 'ejs');

    require('../app/routes/index.server.routes.js')(app);
    require('../app/routes/users.server.routes.js')(app);

    app.use(express.static('./public'));

    return app;
};

最后模态文件 users.server.model.js 就在这里。

var mongoose = require('mongoose'),
    crypto = require('crypto'),
    Schema = mongoose.Schema;

var UserSchema = new Schema({
    name: String,
    email: String,
    username: {
        type: String,
        trim: true,
        unique: true
    },
    password: String,
    provider: String,
    providerId: String,
    providerData: {},
    todos: {}//we will use this in the next tutorial to store TODOs
});

UserSchema.pre('save',
    function(next) {
        if (this.password) {
            var md5 = crypto.createHash('md5');
            this.password = md5.update(this.password).digest('hex');
        }

        next();
    }
);

UserSchema.methods.authenticate = function(password) {
    var md5 = crypto.createHash('md5');
    md5 = md5.update(password).digest('hex');

    return this.password === md5;
};

UserSchema.statics.findUniqueUsername = function(username, suffix, callback) {
    var _this = this;
    var possibleUsername = username + (suffix || '');

    _this.findOne(
        {username: possibleUsername},
        function(err, user) {
            if (!err) {
                if (!user) {
                    callback(possibleUsername);
                }
                else {
                    return _this.findUniqueUsername(username, (suffix || 0) + 1, callback);
                }
            }
            else {
                callback(null);
            }
        }
    );
};

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

在最后两行,我尝试了不同的方法,我也尝试了简单的 mongoose.model('User', UserSchema);这条线但不起作用。 我正在使用这个教程https://hackhands.com/mongodb-crud-mvc-way-with-passport-authentication/

最佳答案

您正在模型注册之前加载/config/passport。您需要首先需要注册模型的文件。所以像这样:

var config = require('./config/config'),
    mongoose = require('./config/mongoose'),
    // require the file that has your model
    model = require('./path/to/users.server.model'),
    passport = require('./config/passport'),
    express = require('./config/express');
var passport = passport();
var db = mongoose(),
    app = express();

或者,您可以在调用 var User = mongoose.model('User'); 之前将该文件包含在/config/passport.js 中

关于node.js - 平均堆栈缺失架构错误 : Schema hasn't been registered for model "User",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30763341/

相关文章:

javascript - 从nodejs服务器将数据发送到另一个html中的对象

node.js - PM2环境变量缓存

mongodb - Scala MongoDB,重写编解码器以写入/读取数组[字节]

node.js - 基于路由删除 MongoDB 中对象的推荐方法

javascript - javascript回调是原子的吗

node.js - 发布表单数据时请求正文为空

javascript - Mongoose 中嵌套查询执行的问题

javascript - 类型错误 : object is not a function In Node JS/socket. io

node.js - Mongoose - 尝试在 MEAN 堆栈中执行 'JOINS'

angularjs - Node js中的二级路由更改根目录