2013-08-24 4 views
21

için kaydedilmemiş - Hızlı 3 - MongoDB benim/rotalara maketimin 'Tweet' için bir sorgu yapmaya çalışıyorumMissingSchemaError: Şema I node.js ile tipik Projesi var modeli

/index.js ve benim app Bu benim 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); 

parçasıdır ve bu benim index.js parçasıdır

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... 

çöktü çalıştırdığınızda

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 
    }); 
}; 

Bu sorguyu yapmanın doğru yolu hangisi olurdu?

+2

"require.js" öğesini "app.js" ye getirmek için 'require' kelimesini nerede çağırdığınızı göstermezsiniz, ancak eğer şemaya 'mongoose.model' çağrısıyla kaydolursanız, o zaman sizin sorun. – JohnnyHK

+0

Dosya/rotalar/index.js Yanlış değilsem \t 'app.get ('/', routes.index) bu satırda ise, otomatik olarak aramaları ifade;' olarak şemayı kayıt sonradır app.js kodunda görebilirsiniz –

+0

Otomatik olarak çağrılmadı, oluşturulan app.js kodundaki bu satır: 'var yollar = gerektirir ('./ rotalar'); – JohnnyHK

cevap

46

index.js dosya yürütülür:

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

Böylece app.js bir firavunfaresi model olarak 'Teewt' şema kayıt sonra aramalarınızı çağrıldığını emin olun. başka bir deyişle

+0

Bu benim için mükemmel çalışıyor. Teşekkürler :) – Timbergus

+0

#feelLikeANoob! –

1

Şema ve modelinizi farklı şekilde adlandırın. Teewt'un yeniden bildirilmesi, herhangi bir programlama dilindeki bir hatanın yanı sıra javascript "bozuk bölümdür". Şema TeewtSchema şemasını ve Teewt modelini arayın (şema genellikle bir uygulamada yalnızca 1 dosyada kullanıldığından, ancak model kapsamlı bir şekilde kullanılabilir). senin app.js dosya aramaları nerede

+0

Haklısınız, bu kötü bir uygulamadır ve değişkenin ismini değiştirir, ancak dizini hatalarını çözmez. Index.js görünüşte ilk olarak şemanın kaydını yapan ilk çalıştırmayı çalıştırır –

+0

Evet, gerçekten de JohnnyHK'nın yorumu muhtemelen sizin kök nedeninizdir. –

+1

Ayrıca onun yorumunu anladığınız da net değil. 'App.js' içinde var olan var yolları = gerektirir ('rotalar'); 've dosyada daha aşağı hareket ettirin, böylece mongoose modelinizin yapılandırılmasından sonra gelir. –

0

, (app.js itibaren) bu satırı: Tweet tescil edildikten sonra

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

(index.js olarak) bu hat üzerinde, çağrılmalıdır:

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

Bu hatayı da aldım. Yardım için bu ve benzer konuları takip ederek hata ayıklamaya çalışıyorum. Sonunda sorun benim durumumda mongoose sürümü nedeniyle ortaya çıktı. Mongoose-fixture'ı mongo ile başlayacak bazı varsayılan verileri tohumlamak için kullanmaya çalışıyordum.

Bunu deneyin: projenizin node_modules yönünü silin, bir npm cache clean çalıştırın ve sonra bir npm install. Bu bile yardımcı olmazsa, sorunlu uygulama ile çalışan bir kullanıcı arasında mongoose/mongoose-fixture sürümlerini karşılaştırmayı deneyin ve sürümü package.json öğesinde değiştirmeyi ve yukarıdaki adımları tekrarlamayı deneyin. Bu benim için çalıştı.