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)

ほとんどの場合、私はここで完全な初心者なので、本当に必要なのは「これを機能させるためにこれを行う」という答えではありませんが、気にしない場合は、このエラーの実際の原因についての説明です。必要に応じて、現在持っている実際のコードを投稿できます。これが非常に単純な問題である場合はお詫び申し上げます。

models.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 以降、モデルを別の方法で定義する必要があります。ノードパッドに適用されることを確認するには、ノードパッドのソース(特にファイル)を読むことをお勧めします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 に答える