1. ホーム
  2. node.js

[解決済み] Mongoose Schema がモデルとして登録されていません。

2022-02-05 01:27:51

質問

平均値スタックを学習しているのですが、以下の方法でサーバーを起動しようとすると、エラーが発生します。

npm start

という例外が発生するんです。

schema hasn't been registered for model 'Post'. Use mongoose.model(name, schema)

以下は /models/Posts.js 内の私のコードです。

var mongoose = require('mongoose');

var PostSchema = new mongoose.Schema({
    title: String,
    link: String, 
    upvotes: { type: Number, default: 0 },
    comments: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Comment' }]
});

mongoose.model('Post', PostSchema);

スキーマはモデル 'Post' に対して登録されているはずですが、例外を発生させる原因は何でしょうか?

よろしくお願いします。

編集する 以下は例外エラーです。

/home/arash/Documents/projects/personal/flapper-news/node_modules/mongoose/lib/index.js:323
  throw new mongoose.Error.MissingSchemaError(name);
        ^
MissingSchemaError: Schema hasn't been registered for model "Post".
Use mongoose.model(name, schema)

そして、これがマングースの初期化を含むapp.jsのコードです。

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/news');
require('./models/Posts');
require('./models/Comments');

を行の前に置く。

app.use('/', routes);

解決方法は?

モデルのエクスポートの問題ではありません。私も同じ問題を抱えていました。

本当の問題は、モデルに対するrequire文が

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/news');
require('./models/Posts');
require('./models/Comments');

は、ルーティングの依存関係の下にありました。mongoDB の依存関係を routes の依存関係の上に移動させるだけです。このような感じになります。

// MongoDB
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/news');
require('./models/Posts');
require('./models/Comments');

var routes = require('./routes/index');
var users = require('./routes/users');

var app = express();