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

AdonisJs问题:执行node ace创建TodoController后提示Cannot find module报错求助

排查AdonisJS中"Cannot find module" TodoController错误

刚遇到这种模块找不到的问题别慌,我帮你梳理几个最常见的原因和对应的解决方法:

1. 控制器文件的路径/命名不符合约定

AdonisJS对控制器的存放位置和命名有严格约定:

  • 控制器默认必须放在 app/Controllers/Http/ 目录下
  • 文件名必须是 TodoController.ts(注意大小写!类Unix系统(Mac/Linux)区分文件名大小写,Windows不区分,但最好严格保持一致)
  • 打开文件确认默认导出的类名是 TodoController(ace命令创建的话默认是对的,但如果手动修改过要检查)

示例正确的控制器结构:

// app/Controllers/Http/TodoController.ts
import type { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'

export default class TodoController {
  public async index({ response }: HttpContextContract) {
    return response.json({ message: 'Todo list' })
  }
  
  // 其他方法...
}

2. 没有重启开发服务器

AdonisJS的开发服务器默认不会自动检测新创建的控制器文件(即使开启了--watch,有时候也不会立即感知到新文件)。创建完控制器后,一定要:

  • 按下 Ctrl+C 停止当前运行的服务器
  • 重新执行 node ace serve --watch 启动服务器,这样新的控制器文件才会被加载

3. 路由中的控制器名称大小写不匹配

看你的路由配置里写的是 TodoController.index,要确保这个名称和控制器文件里的类名完全一致:

  • 不要写成小写开头的 todoController.index
  • 不要出现拼写错误,比如 TodoControllr 少了一个字母

4. TypeScript编译或缓存问题(TS项目专属)

如果你用的是TypeScript版本的AdonisJS:

  • 打开 tsconfig.json,确认 include 数组包含 "app/**/*",这样TypeScript编译器能找到你的控制器文件
  • 执行 node ace clear:cache 清除AdonisJS的缓存,有时候缓存会导致模块查找异常
  • 生产环境下,必须先执行 npm run build 编译TS代码,再启动 node build/server.js

按照上面的步骤排查下来,基本就能解决这个“Cannot find module”的问题了。

内容的提问来源于stack exchange,提问作者forig Men

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 01:32:36