微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

回调不是函数 node.js, mongodb, res.render

如何解决回调不是函数 node.js, mongodb, res.render

我正在尝试从 MongoDB 集合中获取数据,因此我创建了一个 database.js 模块来执行此操作。该模块中的一个函数一个用于从集合中查找数据的exports.find 函数。我将回调传入函数中,因为 Javascript 是异步的,从服务器检索数据需要时间。这是exports.find的代码

exports.find = (database,table,projection,callback) => {
    MongoClient.connect(url,(err,db) => {
        if (err) throw err
        var dbo = db.db(database);
        dbo.collection(table).find({},projection).toArray(function(err,results) {
            if (err) throw err
            callback()
            db.close()
        });
    });
}

然后我在我的 index.js 文件中使用这个函数来使用找到的数据并将其发送到客户端。我通过将 res.render 传入我的回调来做到这一点。

app.get('/',(req,res) => {
    database.find('blog','blog-posts',{},res.render('pages/index'))
})

然而,每当我运行它时,我都会收到此错误

TypeError: callback is not a function
    at C:\Users\21Swag\Documents\Coding\Blog\database.js:23:13

调用回调时错误指向database.js文件

callback()

有谁知道如何解决这个问题?任何帮助将不胜感激。

解决方法

您的回调不是函数,因为您已经在 database.find 中调用它,然后尝试调用该函数的返回值作为您的回调。

也许这会有所帮助:

const one = () => console.log(1)

const cbTest = (cb) => cb()

cbTest(one()) // Error: cb is not a function as it already returned 1

cbTest(one) // will console.log 1 as it is invoked correctly 

通常回调作为匿名函数传递,如下所示:

database.find('blog','blog-posts',{},() => res.render('pages/index'))

您可以在 MongoClient.connect 函数/方法中看到相同的模式。第二个参数是匿名回调,以 (err,db) 作为参数。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。