22

Node.js - Express 3 - MongoDB を使用した典型的なプロジェクトがあります

/routes/index.js でモデル 'Tweet' にクエリを作成しようとしていますが、アプリを実行するとクラッシュしました

24 Aug 11:35:07 - [nodemon] starting `node app.js`

/Applications/XAMPP/xamppfiles/htdocs/ocesa/fanocesa/node_modules/mongoose/lib/index.js:286
  throw new mongoose.Error.MissingSchemaError(name);
        ^
MissingSchemaError: Schema hasn't been registered for model "Teewt".
Use mongoose.model(name, schema)
at Mongoose.model (/Applications/XAMPP/xamppfiles/htdocs/ocesa/fanocesa/node_modules/mongoose/lib/index.js:286:13)
at Object.<anonymous> (/Applications/XAMPP/xamppfiles/htdocs/ocesa/fanocesa/routes/index.js:6:33)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at Object.<anonymous> (/Applications/XAMPP/xamppfiles/htdocs/ocesa/fanocesa/app.js:7:14)
at Module._compile (module.js:456:26)
24 Aug 11:35:07 - [nodemon] app crashed - waiting for file changes before starting...

これは私のapp.jsの一部です

var mongoose = require('mongoose');

mongoose.connect('mongodb://localhost/fanOcesa');
var Schema = mongoose.Schema;
var ObjectID = Schema.ObjectID;

var Teewt = new Schema({
    cuerpo: String
});

var Teewt = mongoose.model('Teewt', Teewt);

var app = express();

app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

// development only
if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}

app.get('/', routes.index);
app.get('/users', user.list);

これは私のindex.jsの一部です

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

Teewt.find({}, function(err, docs){
    console.log('docs');
    console.log(docs);
});

exports.index = function(req, res){
    res.render('index', { 
        docs: docs
    });
};

このクエリを実行する正しい方法はどれですか?

4

4 に答える 4

1

私もこのエラーを受け取りました。これと同様のスレッドをたどって助けを求め、デバッグしようとして、長い間困惑していました。最終的に、私の場合、問題はマングースのバージョンが原因であることが判明しました。mongoose-fixture を使用して、最初から mongo にデフォルト データをシードしようとしていました。

これを試してください:node_modulesプロジェクトのディレクトリを削除し、 を実行してnpm cache cleanからnpm install. それでも問題が解決しない場合は、問題のあるアプリと動作するアプリのmongoose/のバージョンを比較し、 のバージョンを変更して、上記の手順を繰り返してみてください。これは私にとってはうまくいきました。mongoose-fixturepackage.json

于 2014-12-16T05:01:20.630 に答える
1

スキーマとモデルに別の名前を付けます。再宣言Teewtは、JavaScript の「悪い部分」であり、どのプログラミング言語でも間違いです。TeewtSchemaスキーマとモデルを呼び出すだけですTeewt(スキーマは通常、アプリケーション内の 1 つのファイルでのみ使用されますが、モデルは広範囲に使用される可能性があるため)。

于 2013-08-24T17:46:40.540 に答える
0

つまり、この行 (app.js から):

var Teewt = mongoose.model('Teewt', Teewt);

ツイートが登録された後に、その行 (index.js 内) で呼び出す必要があります。

var Teewt = require('mongoose').model('Teewt');
于 2014-06-25T09:36:03.113 に答える