繁体   English   中英

TypeError:undefined不是Node.js中的函数

[英]TypeError: undefined is not a function in Node.js

在我的Group模型中,我正在导出一个函数,该函数使用回调传递查询结果。

在我的路由器文件中,正确地需要另一个文件后,我正在调用此函数。

那是我的./models/groups.js

var groupSchema = new mongoose.Schema({

[...]

module.exports.getAll =  function(cb) {
    groupSchema.find({}, function(err, groups) {
        if (err) return cb(err)
        cb(null, groups)
    })
}

[...]

module.exports = mongoose.model('Group', groupSchema);

那是我的./routes/groups.js文件。

var Group = require('../models/group')
router.route('/groups')

    .get(function(req, res, next) {
        Group.getAll( function(err, group){
            if (err) res.send(err)
            res.send(group)
        })
    })

[...]

这是行不通的,因为每次我发出一个get请求时,我都会得到一个TypeError: undefined is not a function错误。 我知道我可以直接在路由器文件上进行查询,但是我认为将路由和方法之间的内容分开是一种更好的做法。

将新值分配给module.exports时,将覆盖定义getAll函数的对象。

您有2个选择:

  1. 使用getAll函数扩展模型,然后像今天一样导出。
    基本上看起来像这样:

     var model = mongoose.model('Group', groupSchema); model.getAll = function(cb) { ... }; module.exports = model; 

    但这不是很“干净”。

  2. 将模型导出到getAll函数旁边的命名属性下。
    基本上看起来像这样:

     module.exports.getAll = function(cb) { ... }; module.exports.model = mongoose.model('Group', groupSchema); 

    然后,在您的路线中,您将拥有:

     var Groups = require('../models/group'); // Now you have Groups.getAll & Groups.model 

    总体而言,这更加灵活,可以让您导出自己认为合适的其他类型/函数/值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM