2016-05-05 5 views
-1

私のモデル/スキーマはこちらです。作成方法は動作しますが、 "すべての" 方法は...それはここで500 ...私のMongoose findAllメソッドが500エラーを返すのはなぜですか?

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

var DiSchema = new mongoose.Schema({ 
    name: { type: String, lowercase: true , required: true }, 
    photo: { type: String }, 
    email: { type: String, unique: true, lowercase: true }, 
    year: { type: Number}, 
    timestamp: { type : Date, default: Date.now }, 
    description: { type: String}, 
    location: { type: Array }, 
    social: { 
    website: {type: String}, 
    facebook: {type: String }, 
    twitter: {type: String }, 
    instagram: {type: String } 
    } 
}); 

DiSchema.methods.create = function(o, cb){ 
    this.model.save(o, cb); 
}; 

DiSchema.methods.all = function(o, cb){ 
    Di.find(o, cb); 
}; 

module.exports = mongoose.model('Di', DiSchema); 

は私のコントローラで返しません。

'use strict'; 

var Di = require('../models/di'); 

exports.create = function(req, res){ 
    Di.create(req.body , function(err, di){ 
    console.log('req.body.di', req.body); 
    res.send({di:di}); 
    }); 
}; 

exports.index = function(req, res){ 
    Di.all({}, function(err, dis){ 
    res.send({dis:dis}); 
    }); 
}; 

ルート:

var dis = require('../contollers/dis'); 
app.get('/dis', dis.index); 
app.post('/dis', dis.create); 

作成メソッドは正常に動作しますが、インデックス/すべてのメソッドを使用してgetエンドポイントに到達すると、私は500を取得し続けます。

私はコントローラ内で直接クエリを実行すると、動作します。

しかし、スキーマメソッドから呼び出そうとすると、それはできません。

私は間違った方法を使用していますか?私のJSはオフですか?


更新:

私はコントローラにこのコードを置けば、それは動作します:まだ

exports.index = function(req, res){ 
    Di.find({}, function(err, dis) { 
    if (!err){ 
     res.send(dis); 
    }; 
}); 
}; 

「の元の質問に興味を持っ方法から機能しない理由モデル "。


は私も無駄に、モデルでこのリファクタリングを試してみた:

DiSchema.methods.list = function(o, cb){ 
    this.model.find(o, cb); 
}; 

&

DiSchema.methods.list = function(o, cb){ 
    this.model('Di').find(o, cb); 
}; 
+0

500エラーの原因となった例外は何ですか?そこからデバッグできるはずです。 – JohnnyHK

+0

インスペクタツールでネットワークに何も表示されません。 500を示す唯一のものは、ターミナル内のモルガンです。これをさらにデバッグする方法を見ていきます。 console.logをDistiller.all関数(コントローラ内)に置くと、決してヒットしないので、関数が正しく呼び出されていないか、ハングアップしているようです... – NoobSter

答えて

0

わかりましたので、いくつかのこと...

モデルを静的メソッドに変更する必要がありました。モデルの方法。

また、構文を変更する必要がありました。

DiSchema.statics.all = function(o, cb){ 
    this.model('Di').find(o, cb); 
}; 

誰もがこれらの二つの変更が必要とされた理由として素人年代のより良い説明を与えるしたい場合 - 私は正解の所有権を変更させていただきます。

関連する問題