11

我试图通过 Dailyjs.com 上的 nodepad 教程(在此处找到)。当我在尝试执行时收到此消息时(在 tut 的第 2 步之后),我最终停止了:

Error: Schema hasn't been registered for model "Document".
Use Mongoose.define(name, schema)
    at Mongoose.model     (/usr/local/lib/node/.npm/mongoose/1.0.16/package/lib/mongoose/index.js:138:13)
    at Object.<anonymous> (/root/Repos/nodepad/models.js:3:10)
    at Module._compile (module.js:374:26)
    at Object..js (module.js:380:10)
    at Module.load (module.js:306:31)
    at Function._load (module.js:272:10)
    at require (module.js:318:19)
    at Object.<anonymous> (/root/Repos/nodepad/app.js:10:16)
    at Module._compile (module.js:374:26)
    at Object..js (module.js:380:10)

大多数情况下,我在这里是一个完全的菜鸟,所以我真正需要的不是“这样做才能使它工作”的答案,但如果你不介意,解释一下这个错误的实际原因是什么。如果需要,我可以发布我现在拥有的实际代码,如果这是一个非常简单的问题,我深表歉意。

模型.js:

var mongoose = require('mongoose');

mongoose.model('Document', {
    properties: ['title', 'data', 'tags'],
    indexes:    ['title']
});

exports.Document = function(db) {
    return db.model('Document');
};
4

1 回答 1

25

从 Mongoose 1.0 开始,您必须以不同的方式定义模型。要查看应用于 nodepad 的内容,我建议阅读nodepad 的源代码(尤其是文件models.js)。

例子:

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

var User = new Schema({
  email: {
    type: String,
    index: { unique: true }
  },
  name: String,
  lastseen: Date,
  isonline: Boolean,
  hashed_password: String,
  salt: String
});

mongoose.model('User', User);

可悲的是,DailyJS 教程中的“旧”博文有点过时了。Alex Youg 确实发布了一些后续帖子,将现有教程迁移到 Mongoose 1.0(引入了非常重的 API 更改),请参见此处

于 2011-02-28T11:52:39.853 回答