2016-05-05 49 views
-1

這是我的模型/架構。 Create方法的作品,但 「所有」 的方法不會..它返回一個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); 

的創建方法工作正常,但當我點擊獲得終點,索引/所有方法 - 我一直得到一個500.

我可以把th直接在控制器中查詢,並且它工作。

但是,當我嘗試從模式方法調用它 - 它不會。

我使用的方法錯了嗎?我的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的是摩根 - 在終端。我會進一步調查這一點。如果我在Distiller.all函數中(在控制器內)放置一個console.log,它永遠不會被命中,所以看起來函數沒有被正確調用或掛起... – NoobSter

回答

0

好了,所以一些東西..

的模型需要更改爲靜態方法。模型的一種方法。

此外,需要更改語法。

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

如果有人想給外行的更好的說明,爲什麼需要有這兩個變化 - 我會很樂意改變正確答案的所有權。

相關問題