Node.js导入async异步函数调用时报not a function错误如何解决
问题排查及解决方案
核心原因定位
你遇到的dataUser.consoleTest() is not a function错误,90%以上的概率是dbandauth.js的导出逻辑被覆盖,或者导入路径不匹配导致的,具体排查步骤如下:
1. 检查dbandauth.js的导出逻辑
你当前贴出的代码末尾只导出了consoleTest函数,但该文件内定义了newsRouter路由对象,大概率你的实际代码末尾存在module.exports = newsRouter这类导出路由的代码,会直接覆盖之前挂载在module.exports上的consoleTest属性,导致最终导出的只有路由对象,不存在consoleTest方法。
修复方案:
如果需要同时导出路由和工具函数,把导出逻辑修改为合并导出:
// dbandauth.js 末尾替换原有导出代码 module.exports = { consoleTest, newsRouter }
其他需要引入该文件路由的代码同步修改导入方式即可:
const { newsRouter } = require('./dbandauth')
2. 核对导入路径正确性
你当前passport.js中使用的导入路径是./dbandauth,代表两个文件处于同一个目录下。如果dbandauth.js和passport.js不在同一文件夹,需要调整相对路径:
- 如果dbandauth.js在passport.js的上一级目录,路径改为
../dbandauth - 如果dbandauth.js在passport.js上级的lib文件夹,路径改为
../lib/dbandauth
3. 快速验证方法
在passport.js的导入语句后添加打印逻辑,直接确认导出内容:
const dataUser = require('./dbandauth') console.log('导出内容:', dataUser)
如果打印结果是Router对象,说明是导出逻辑覆盖问题;如果打印为空对象,说明路径导入错误。
附加优化建议
consoleTest是异步函数,直接调用如果出现异常会触发未捕获的Promise rejection报错,建议调用时添加错误捕获逻辑:
dataUser.consoleTest() .catch(err => console.error('函数执行出错:', err))
内容的提问来源于stack exchange,提问作者anh phan
相关产品推荐
相关产品推荐

