MissingSchemaError:尚未为模型"用户"注册架构

 情商是你弟 发布于 2023-02-07 16:04

在我的models/user.js档案中:

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

var userSchema = new Schema({
    (define schema)
});
...
(save user)
...
(check password)
...
mongoose.model('User', userSchema);

在我router/index.js,我有:

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

抛出错误:

MissingSchemaError: Schema hasn't been registered for model "User".

但是,如果user.js,我(在最后一行)

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

index.js我这样做var User = require('../models/User');,然后一切正常.

但它不应该,因为config/pass.js我正在做,var User = mongoose.model('User');而且它的工作完美无瑕.

require('../models/User');语法不工作在Ubuntu,但在我的Mac.

我该怎么办?我如何解决它?我看了很多样本​​应用程序,包括MEAN,但没有什么是真正有用的.

4 个回答
  • 我在尝试MEAN教程时遇到了同样的问题.

    在做了一点研究后,我发现在app.js中,如果我在var routes = require("./ routes/index")之前放置require("./ models/User"),那么它就可以了.

    像这样:


    mongoose.connect("mongodb://localhost/news");
    require("./models/Posts");
    require("./models/Comments");
    
    var routes = require('./routes/index');
    var users = require('./routes/users');
    
    var app = express();
    

    希望答案会有所帮助!

    2023-02-07 16:05 回答
  • 发生错误是因为models/user.js尚未按时router/index.js加载解释.解决此问题的一种方法是执行以下操作:

    var mongoose = require('mongoose');
    //Load all your models
    var User = require('./../models/user.js');
    
    //Now, this call won't fail because User has been added as a schema.
    mongoose.model('User');
    

    然而,这反映出最佳实践,这要求所有这些配置app.js文件应该在文件的开头发生.从madhums的示例项目中查看此示例

    var models_path = __dirname + '/app/models'
    fs.readdirSync(models_path).forEach(function (file) {
      if (~file.indexOf('.js')) require(models_path + '/' + file)
    })
    

    请注意,他在设置应用程序的路由器之前正在加载他的模型.至于Ubuntu vs Mac问题,我认为这是因为Ubuntu中的相对路径必须从一开始./.您只需将其更改为./../models/user.js适用于Mac的即可.

    2023-02-07 16:05 回答
  • 您的mongoose模式js文件中的所有代码应该在其他文件中使用之前运行.

    例如,以下代码段确保执行mongoose模式文件/模块.

    fs.readdirSync(__ dirname +'/ app/model').forEach(functions(file){if(~file.indexOf('.js'))require(__ dirname +'/ app/models /'+ file);} );

    或者可以通过调用手动执行模式文件

    var User = require('./ app/models/user.js')

    在模型在应用程序的任何地方使用之前.

    完成上述操作后,可以要求/执行使用mongoose模型的其他模块.

    2023-02-07 16:05 回答
  • 在加载模型文件加载之前尝试获取模型时发生此问题

    我在mean.io项目中解决了同样的问题

    在控制器中:

    'use strict';
    require('../models/settingsModel'); // load settingsModel.js file before get mongoose.model('Settings')
    var mongoose = require('mongoose'),
        Settings = mongoose.model('Settings'),
        Q = require('q');
    

    2023-02-07 16:05 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有