【问题标题】:Mongoose MissingSchemaError while loading node.js server加载 node.js 服务器时出现 Mongoose MissingSchemaError
【发布时间】:2016-02-23 14:08:45
【问题描述】:

我正在编写一些 node.js/express 应用程序并收到此消息:

抛出新的 mongoose.Error.MissingSchemaError(name);

MissingSchemaError:尚未为模型“./models/User”注册架构。

我使用 express-generator 生成了我的项目,我的项目树如下所示:

app.js

bin/

node_modules/

package.json

公开/

路线/

观看次数/

模型/

我在 models/ 文件夹中创建了四个模型: user.js

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

    var UserSchema = new Schema({
        email: String,
        hash: String,
        salt: String,
        first_name: String,
        last_name: String,
        position: String
    });
    module.exports = mongoose.model('User', UserSchema);

payment.js

    var mongoose = require('mongoose');
    require('./user');

    var PaymentSchema = new mongoose.Schema({
        bookedDate: Date,
        salary: {type: Number, default: 0},
        employee: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }
    });
    module.exports = mongoose.model('Payment', PaymentSchema);

task.js

var mongoose = require('mongoose');
require('./user');

var TaskSchema = new mongoose.Schema({
    job: String,
    employee: { type: mongoose.Schema.Types.ObjectId, ref: 'User' },
    estimatedTime: { type: Number, default:0 },
    hoursLogged: { type: Number, default:0 }
});

module.exports = mongoose.model('Task', TaskSchema);

vacation.js

var mongoose = require('mongoose');
require('./user');
var VacationSchema = new mongoose.Schema({
    startDate: Date,
    endDate: Date,
    title: String,
    employee: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }
});

module.exports = mongoose.model('Vacation', VacationSchema);

我的错误出现在文件 :routes\index.js 中,该文件以加载模型开始:

var express = require('express');
var router = express.Router();

var mongoose = require('mongoose');

require('../models/user');
require('../models/task');
require('../models/payment');
require('../models/vacation');

var User = mongoose.model('./models/User'); // <-- error throws here
var Task = mongoose.model('./models/Task');
var Vacation = mongoose.model('./models/Vacation');
var Payment = mongoose.model('./models/Payment');

但我加载的第一个文件是 app.js,其开头为:

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

var app = express();

var mongoose = require('mongoose');
require('./models/user');
require('./models/task');
require('./models/payment');
require('./models/vacation');

var routes = require('./routes/index'); //<-- index.js with error loads here
var users = require('./routes/users');

mongoose.connect('mongodb://localhost/local_test');

有什么建议吗?

【问题讨论】:

  • user.js 的其余部分在哪里?你只有module.exports = mongoose.model('User',
  • mongoose.model('User', UserSchema);我现在填了。

标签: node.js mongodb mongoose mongoose-schema


【解决方案1】:

改变

var mongoose = require('mongoose');

require('../models/user');
require('../models/task');
require('../models/payment');
require('../models/vacation');

var User = mongoose.model('./models/User'); // <-- error throws here
var Task = mongoose.model('./models/Task');
var Vacation = mongoose.model('./models/Vacation');
var Payment = mongoose.model('./models/Payment');

var mongoose = require('mongoose');

var User = require('../models/user');
var Task = require('../models/task');
var Vacation = require('../models/payment');
var Payment = require('../models/vacation');

【讨论】:

  • 对不起,我应该在之前发布它:但是当我这样做时,我无法在我的路线上的 Task 对象上调用 find() 函数。而且我也无法访问像 findById 这样在猫鼬模型中可以访问的任何功能。示例: router.get('/tasks', function(req,res,next){ Task.find(function(err, tasks){ if(err){ return next(err); } res.json(tasks); }
  • @qwertyxop 这听起来像是一个不同的问题。这是在 routes/index.js 文件还是其他文件中?
  • 是的,它在我的 routes/index.js 文件中,但我考虑在未来添加更多路由,所以这个问题会变得非常烦人。你能给我一些建议吗?
猜你喜欢
  • 2017-08-21
  • 1970-01-01
  • 2019-04-09
  • 1970-01-01
  • 1970-01-01
  • 2012-08-12
  • 2013-08-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多