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

Posted

技术标签:

【中文标题】为啥我的 Mongoose findAll 方法返回 500 错误 ..?【英文标题】:Why is my Mongoose findAll method returning a 500 error ..?为什么我的 Mongoose findAll 方法返回 500 错误 ..? 【发布时间】:2016-08-30 17:23:48 【问题描述】:

这是我的模型/架构。 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 方法工作正常,但是当我使用 index / all 方法到达 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);
;

【问题讨论】:

导致500错误的异常包含什么?你应该可以从那里调试它。 我在检查器工具中没有在网络上显示任何内容。唯一显示 500 的是摩根——在终端。我会进一步研究调试这个。如果我将 console.log 放在 Distiller.all 函数中(在控制器内),它永远不会被击中,所以似乎该函数没有被正确调用或被挂起...... 【参考方案1】:

好的,有几件事..

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

此外,还需要更改语法。

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

如果有人想以通俗易懂的方式更好地描述为什么需要这两项更改 - 我很乐意更改正确答案的所有权。

【讨论】:

以上是关于为啥我的 Mongoose findAll 方法返回 500 错误 ..?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 jQuery .ajax() 路由的 .done() 方法没有在我的 NodeJS、Express 和 Mongoose 项目中触发?

当我的模式只包含一个组时,为啥 re.findall 会返回一个元组列表?

为啥 isset($this->var) 在我的 Codeigniter 模型中总是返​​回 false?

为啥 match 返回 None 而 findall 不返回?

为啥我的 Mongoose 填充请求不起作用?

Nest.js/Mongoose:为啥我的预保存钩子无法触发?