如何解决回调不是函数 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
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 举报,一经查实,本站将立刻删除。