AdonisJS Ace CLI Guide
AdonisJS Ace CLI 指南
AdonisJS is a TypeScript-first Node.js framework for building server-side applications. Ace is the command-line framework embedded into AdonisJS core. This guide provides essential workflows and quick references for common AdonisJS operations.
AdonisJS是一个优先支持TypeScript的Node.js服务器端应用框架。Ace是嵌入AdonisJS核心的命令行框架。本指南提供了AdonisJS常见操作的核心工作流和快速参考。
Create new AdonisJS project
Create new AdonisJS project
npm init adonisjs@latest my-app
npm init adonisjs@latest my-app
Navigate to project
Navigate to project
Generate app key
Generate app key
Start development server
Start development server
List all available commands
List all available commands
Get help for a command
Get help for a command
Workflow 1: API Project Setup
工作流1:API项目搭建
Create API project
Create API project
npm init adonisjs@latest my-api -- --kit=api
cd my-api
npm init adonisjs@latest my-api -- --kit=api
cd my-api
Generate app key
Generate app key
Install and configure database
Install and configure database
node ace add @adonisjs/lucid
node ace add @adonisjs/lucid
Create initial model with migration
Create initial model with migration
node ace make:model User -m
node ace make:model User -m
Run migrations
Run migrations
Start dev server with HMR
Start dev server with HMR
Workflow 2: CRUD Resource Creation
工作流2:CRUD资源创建
Create complete resource (model, migration, factory, controller)
Create complete resource (model, migration, factory, controller)
node ace make:model Post -mfc
node ace make:model Post -mfc
Create validators for the resource
Create validators for the resource
node ace make:validator post --resource
node ace make:validator post --resource
Create service for business logic
Create service for business logic
node ace make:service post
node ace make:service post
Edit migration file (database/migrations/xxxxx_posts.ts)
Edit migration file (database/migrations/xxxxx_posts.ts)
Add table columns
Add table columns
Run migration
Run migration
Create seeder for testing data
Create seeder for testing data
node ace make:seeder Post
node ace make:seeder Post
Workflow 3: Database Management
工作流3:数据库管理
Create migration
Create migration
node ace make:migration add_slug_to_posts
node ace make:migration add_slug_to_posts
Preview migration changes (dry run)
Preview migration changes (dry run)
node ace migration:run --dry-run
node ace migration:run --dry-run
Run migrations
Run migrations
Check migration status
Check migration status
node ace migration:status
node ace migration:status
Rollback last batch
Rollback last batch
node ace migration:rollback
node ace migration:rollback
Refresh database (reset + run)
Refresh database (reset + run)
node ace migration:refresh --seed
node ace migration:refresh --seed
Workflow 4: Authentication Setup
工作流4:认证设置
Install authentication package
Install authentication package
node ace add @adonisjs/auth
node ace add @adonisjs/auth
Install session support
Install session support
node ace add @adonisjs/session
node ace add @adonisjs/session
Create auth controllers
Create auth controllers
node ace make:controller auth/login
node ace make:controller auth/register
node ace make:controller auth/login
node ace make:controller auth/register
Create auth middleware
Create auth middleware
node ace make:middleware auth
node ace make:middleware auth
Run auth migrations
Run auth migrations
Workflow 5: Production Build
工作流5:生产环境构建
Build application
Build application
Navigate to build directory
Navigate to build directory
Install production dependencies
Install production dependencies
Run migrations in production
Run migrations in production
node ace migration:run --force
node ace migration:run --force
Start production server
Start production server
When to use which command:
- To start development: Use
- To create models: Use
node ace make:model Name -mfc
(includes migration, factory, controller)
- To create API controllers: Use
node ace make:controller name --resource --api
- To manage database: Use migration commands (, , )
- To add packages: Use
node ace add @adonisjs/package-name
- To validate input: Use
node ace make:validator name --resource
- To view routes: Use
node ace list:routes --middleware
- For detailed command syntax: See Commands Reference
- For implementation patterns: See Common Patterns
- For debugging: See Troubleshooting Guide
何时使用对应命令:
- 启动开发服务:使用
- 创建模型:使用
node ace make:model Name -mfc
(包含迁移、工厂、控制器)
- 创建API控制器:使用
node ace make:controller name --resource --api
- 管理数据库:使用迁移命令(, , )
- 添加包:使用
node ace add @adonisjs/package-name
- 验证输入:使用
node ace make:validator name --resource
- 查看路由:使用
node ace list:routes --middleware
- 获取详细命令语法:查看 Commands Reference
- 了解实现模式:查看 Common Patterns
- 调试问题:查看 Troubleshooting Guide
Creating Resource Controllers
创建资源控制器
RESTful API controller
RESTful API controller
node ace make:controller posts --resource --api
node ace make:controller posts --resource --api
Generates controller with:
Generates controller with:
- index() GET /posts
- index() GET /posts
- store() POST /posts
- store() POST /posts
- show() GET /posts/:id
- show() GET /posts/:id
- update() PUT /posts/:id
- update() PUT /posts/:id
- destroy() DELETE /posts/:id
- destroy() DELETE /posts/:id
typescript
// One-to-Many (User has many Posts)
// app/models/user.ts
@hasMany(() => Post)
declare posts: HasMany<typeof Post>
// app/models/post.ts
@belongsTo(() => User)
declare user: BelongsTo<typeof User>
// Query with relationships
const user = await User.query().preload('posts')
const post = await Post.query().preload('user').first()
typescript
// One-to-Many (User has many Posts)
// app/models/user.ts
@hasMany(() => Post)
declare posts: HasMany<typeof Post>
// app/models/post.ts
@belongsTo(() => User)
declare user: BelongsTo<typeof User>
// Query with relationships
const user = await User.query().preload('posts')
const post = await Post.query().preload('user').first()
typescript
// Create validator: node ace make:validator post --resource
// app/validators/post.ts
import vine from '@vinejs/vine'
export const createPostValidator = vine.compile(
vine.object({
title: vine.string().minLength(3).maxLength(255),
content: vine.string().minLength(10),
isPublished: vine.boolean().optional(),
})
)
// Use in controller
const payload = await request.validateUsing(createPostValidator)
typescript
// Create validator: node ace make:validator post --resource
// app/validators/post.ts
import vine from '@vinejs/vine'
export const createPostValidator = vine.compile(
vine.object({
title: vine.string().minLength(3).maxLength(255),
content: vine.string().minLength(10),
isPublished: vine.boolean().optional(),
})
)
// Use in controller
const payload = await request.validateUsing(createPostValidator)
typescript
// Create table migration
export default class extends BaseSchema {
protected tableName = 'posts'
async up() {
this.schema.createTable(this.tableName, (table) => {
table.increments('id')
table.string('title').notNullable()
table.text('content').notNullable()
table.integer('user_id').unsigned()
.references('users.id').onDelete('CASCADE')
table.timestamp('created_at')
table.timestamp('updated_at')
})
}
async down() {
this.schema.dropTable(this.tableName)
}
}
typescript
// Create table migration
export default class extends BaseSchema {
protected tableName = 'posts'
async up() {
this.schema.createTable(this.tableName, (table) => {
table.increments('id')
table.string('title').notNullable()
table.text('content').notNullable()
table.integer('user_id').unsigned()
.references('users.id').onDelete('CASCADE')
table.timestamp('created_at')
table.timestamp('updated_at')
})
}
async down() {
this.schema.dropTable(this.tableName)
}
}
Authentication Patterns
认证模式
typescript
// Session-based login
export default class LoginController {
async store({ request, auth, response }: HttpContext) {
const { email, password } = request.only(['email', 'password'])
const user = await User.verifyCredentials(email, password)
await auth.use('web').login(user)
return response.redirect('/dashboard')
}
}
// API token generation
export default class TokensController {
async store({ request, response }: HttpContext) {
const { email, password } = request.only(['email', 'password'])
const user = await User.verifyCredentials(email, password)
const token = await User.accessTokens.create(user)
return response.created({ token: token.value!.release() })
}
}
typescript
// Session-based login
export default class LoginController {
async store({ request, auth, response }: HttpContext) {
const { email, password } = request.only(['email', 'password'])
const user = await User.verifyCredentials(email, password)
await auth.use('web').login(user)
return response.redirect('/dashboard')
}
}
// API token generation
export default class TokensController {
async store({ request, response }: HttpContext) {
const { email, password } = request.only(['email', 'password'])
const user = await User.verifyCredentials(email, password)
const token = await User.accessTokens.create(user)
return response.created({ token: token.value!.release() })
}
}
Common Issues:
-
Server won't start
- Quick fix: Check if port is in use
- Generate APP_KEY:
- See: Server Issues
-
Migration fails
- Quick fix: Check migration status
node ace migration:status
- Verify database connection in
- See: Migration Fails
-
Database connection refused
- Quick fix: Verify database is running and credentials
- Test connection:
psql -h localhost -U postgres
- See: Cannot Connect to Database
-
Validation always fails
- Quick fix: Ensure validator is compiled
- Check field names match request data
- See: Validation Issues
-
Route not found (404)
- Quick fix: List routes with
- Check route order (specific before wildcards)
- See: Route Not Found
For detailed troubleshooting steps, see the Troubleshooting Guide.
常见问题:
-
服务器无法启动
- 快速修复:检查端口是否被占用
- 生成APP_KEY:
- 查看:Server Issues
-
迁移失败
- 快速修复:检查迁移状态
node ace migration:status
- 验证中的数据库连接
- 查看:Migration Fails
-
数据库连接被拒绝
- 快速修复:验证数据库是否运行以及中的凭据
- 测试连接:
psql -h localhost -U postgres
- 查看:Cannot Connect to Database
-
验证始终失败
- 快速修复:确保验证器已编译
- 检查字段名称是否与请求数据匹配
- 查看:Validation Issues
-
路由未找到(404)
- 快速修复:使用列出路由
- 检查路由顺序(特定路由优先于通配符路由)
- 查看:Route Not Found
如需详细故障排除步骤,请查看 Troubleshooting Guide。
Load as needed for detailed information:
-
Commands Reference - Complete Ace CLI command documentation with all flags and options. Use when you need exact syntax, flag details, or comprehensive command documentation.
-
Common Patterns - Real-world patterns for CRUD resources, authentication, validation, relationships, events, testing, and production deployment. Use for implementing specific features or architectural patterns.
-
Troubleshooting Guide - Detailed error messages, diagnosis steps, and resolution strategies for server, database, authentication, routing, build, and performance issues. Use when encountering errors or unexpected behavior.
When to use each reference:
- Use Commands Reference when you need exact command syntax, flag combinations, or comprehensive CLI documentation
- Use Common Patterns for implementing CRUD operations, authentication flows, database relationships, or production deployments
- Use Troubleshooting when server won't start, migrations fail, authentication breaks, or you encounter build/performance issues
按需加载以获取详细信息:
-
Commands Reference - 完整的Ace CLI命令文档,包含所有标志和选项。当你需要确切语法、标志细节或全面的命令文档时使用。
-
Common Patterns - 用于CRUD资源、认证、验证、关联、事件、测试和生产部署的实际应用模式。用于实现特定功能或架构模式时使用。
-
Troubleshooting Guide - 针对服务器、数据库、认证、路由、构建和性能问题的详细错误信息、诊断步骤和解决策略。当遇到错误或意外行为时使用。
何时使用各参考文件:
- 当你需要确切的命令语法、标志组合或全面的CLI文档时,使用 Commands Reference
- 当实现CRUD操作、认证流程、数据库关联或生产部署时,使用 Common Patterns
- 当服务器无法启动、迁移失败、认证失效或遇到构建/性能问题时,使用 Troubleshooting