简介

简介

什么是 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 子路径导入别名、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'])

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

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 array will be serialized to JSON
* automatically.
*/
return posts
}
}

本指南的假设

AdonisJS 文档以参考指南的形式编写,涵盖了核心团队维护的多个软件包和模块的用法与 API。

本指南不会教你如何从零开始构建一个应用。如果你正在寻找教程,我们推荐从 Adocasts 开启你的旅程。Tom(Adocasts 的创建者)制作了一些高质量的 screencast,帮助你迈出使用 AdonisJS 的第一步。

尽管如此,文档广泛涵盖了可用模块的使用方法以及框架的内部运作机制。

近期发布

以下是近期发布的版本列表。点击此处 查看全部发布版本。

软件包 变更 发布日期
@adonisjs/repl 更新依赖. Aug 15, 2025
@adonisjs/eslint-config 移除 @stylistic/eslint-plugin-ts,改用 @stylistic/eslint-plugin. Aug 8, 2025
@adonisjs/lucid 执行 seeders 时使用自然排序,并在紧凑模式下出错时显示迁移文件名. Jul 22, 2025
@adonisjs/cache `cache:prune` 与数据库迁移. Jul 20, 2025
@adonisjs/i18n 从翻译中解析 otherField. Jul 16, 2025

赞助商