You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 07:15:03