AdonisJS v7 已完成功能开发,正在进行最终验证。 了解更多

介绍

介绍

什么是 AdonisJS?

AdonisJS 是一个优先支持 TypeScript 的 Node.js Web 框架。你可以用它来构建全栈 Web 应用或 JSON API 服务器。

在基础层面,AdonisJS 为你的应用提供结构,配置无缝的 TypeScript 开发环境,为后端代码配置 HMR (热模块替换),并提供大量维护良好且文档详尽的软件包。

我们设想使用 AdonisJS 的团队可以花费更少的时间在琐碎的决策上(例如为每个小功能挑选 npm 包、编写胶水代码、争论完美的目录结构),从而花费更多的时间交付对业务至关重要的实际功能。

前端无关

AdonisJS 专注于后端,允许你选择自己喜欢的前端技术栈。

如果你喜欢保持简单,可以将 AdonisJS 与传统模板引擎搭配使用,在服务器端生成静态 HTML;或者为你的前端 Vue/React 应用创建 JSON API;或者使用 Inertia 让这一且完美融合。

AdonisJS 旨在为你提供从零开始构建健壮后端应用所需的“电池”。无论是发送邮件、验证用户输入、执行 CRUD 操作,还是用户身份验证,我们都已为你准备好。

现代且类型安全

AdonisJS 构建在现代 JavaScript 原语之上。我们使用 ES 模块、Node.js 子路径导入别名 (sub-path import aliases)、使用 SWC 执行 TypeScript 源码,并使用 Vite 进行资源打包。

此外,TypeScript 在设计框架 API 时扮演了重要角色。例如,AdonisJS 拥有:

拥抱 MVC

AdonisJS 拥抱经典的 MVC 设计模式。你首先使用函数式 JavaScript API 定义路由,将控制器绑定到路由上,并在控制器内编写处理 HTTP 请求的逻辑。

start/routes.ts
import router from '@adonisjs/core/services/router'
const PostsController = () => import('#controllers/posts_controller')
router.get('posts', [PostsController, 'index'])

控制器可以使用模型 (Models) 从数据库获取数据,并渲染视图(即模板)作为响应。

app/controllers/posts_controller.ts
import Post from '#models/post'
import type { HttpContext } from '@adonisjs/core/http'
export default class PostsController {
async index({ view }: HttpContext) {
const posts = await Post.all()
return view.render('pages/posts/list', { posts })
}
}

如果你正在构建 API 服务器,可以将视图层替换为 JSON 响应。但是,处理和响应 HTTP 请求的流程保持不变。

app/controllers/posts_controller.ts
import Post from '#models/post'
import type { HttpContext } from '@adonisjs/core/http'
export default class PostsController {
async index({ view }: HttpContext) {
const posts = await Post.all()
return view.render('pages/posts/list', { posts })
/**
* Posts 数组将自动序列化为 JSON
*/
return posts
}
}

指南假设

AdonisJS 文档是作为参考指南编写的,涵盖了核心团队维护的多个包和模块的用法及 API。

本指南不教你如何从零开始构建应用程序。如果你在寻找教程,我们建议从 Adocasts 开始你的旅程。Tom (Adocasts 的创建者) 制作了一些高质量的截屏视频,帮助你迈出使用 AdonisJS 的第一步。

话虽如此,本文档广泛涵盖了可用模块的用法以及框架的内部工作原理。

最近发布

以下是最近发布的版本列表。点击这里查看所有版本。

Package Change Released on
@adonisjs/repl 更新依赖. Aug 15, 2025
@adonisjs/eslint-config 移除 @stylistic/eslint-plugin-ts,改用 @stylistic/eslint-plugin. Aug 8, 2025
@adonisjs/lucid 执行 seeder 时使用自然排序,并在紧凑模式下的错误中显示迁移文件名. Jul 22, 2025
@adonisjs/cache `cache:prune` 和数据库迁移. Jul 20, 2025
@adonisjs/i18n 从翻译中解析 otherField. Jul 16, 2025

赞助商