为什么我的Mongoose findAll方法返回500错误..?

时间:2016-05-05 03:31:22

标签: javascript node.js mongodb mongoose mongoose-schema

这是我的模型/架构。 create方法有效,但" all"方法不会..它返回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);

create方法工作正常,但是当我点击get端点时,使用index / all方法 - 我一直得到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);
};

1 个答案:

答案 0 :(得分:0)

好的,还有一些事情......

需要将模型更改为静态方法。一种模型的方法。

此外,需要更改语法。

const apiOne = express.Router()
apiOne.get('/api-one/hello', helloApiOne)
apiOne.use(notFoundHandler)
apiOne.use(errorHandler)

const apiTwo = express.Router()
apiTwo.get('/api-two/hello', helloApiTwo)
apiTwo.use(notFoundHandler)
apiTwo.use(errorHandler)

const app = express()
app.get(apiOne)
app.use(apiTwo)

如果有人想在外行中更好地描述为什么需要这两项改变 - 我会很乐意改变正确答案的所有权。