命令行与 REPL
你可能会疑惑,为什么我们要先讲 CLI 和 REPL,而不是直接开始构建功能。原因在这里:在本教程中,你会不断地使用 Ace 命令来生成控制器、模型以及其他文件。现在熟悉 CLI,可以避免我们之后打断流程。
更重要的是, REPL 将成为我们试验模型与数据库的游乐场。当我们在后续章节探索数据库查询、过滤与关联时,会用 REPL 来动手尝试。它是一个一次性的环境,让我们专注于学习概念,而无需经历构建完整功能的繁琐流程。
探索可用的命令
让我们先看看 AdonisJS 为我们提供了哪些命令。在你的终端中运行以下指令。
node ace list
你应该会看到类似这样的内容:
注意这些命令是如何分组的?
make:*命令用于生成文件。migration:*命令用于运行和回滚数据库迁移。db:*命令用于处理数据库填充,以此类推。
想进一步了解某个具体命令?只需在末尾加上 --help。它会展示该命令的全部能力,包括你可以传入的所有选项。
node ace make:controller --help
使用 REPL
在整个教程中,REPL 将是我们的试验游乐场。让我们通过为 DevShow Web 应用创建和查询用户来探索如何使用它。
启动 REPL 并加载模型
首先,启动 REPL:
node ace repl
REPL 启动后,使用 loadModels() 辅助函数加载所有模型。REPL 提供了多个像这样的内置辅助函数,以简化试验过程。该辅助函数会让所有模型在 models 命名空间下可用。
await loadModels()
// 访问 user 模型
models.user
创建用户
让我们使用 User 模型(存放在 app/models/user.ts 文件中)来创建几个用户,方便我们稍后登录应用。create 方法接受模型属性作为对象,将其持久化到数据库并返回模型实例。
await models.user.create({ fullName: 'Harminder Virk', email: 'virk@adonisjs.com', password: 'secret' })
让我们再创建另一个用户。
await models.user.create({ fullName: 'Jane Doe', email: 'jane@example.com', password: 'secret' })
获取所有用户
既然你已经创建了几个用户,让我们用 all 方法把它们取出来。该方法会执行一条 SELECT * 查询,并返回包含这两个用户的数组。每个用户都是一个 User 模型实例,而非普通的 JavaScript 对象。
await models.user.all()
查找并删除用户
你可以使用 find 方法按给定 ID 查找用户。返回值是一个 User 模型实例,或者在没有找到用户时为 null。
const user = await models.user.find(1)
user.id
// 1
user.email
// 'virk@adonisjs.com'
你可以直接在 User 实例上调用 delete 方法来删除该用户。
await user.delete()
user.$isDeleted // true
如果你再次列出所有用户,应该只会看到 Jane 还在:
await models.user.all()
退出 REPL
当你探索完毕,输入 .exit 或按下 Ctrl+D 即可离开 REPL,返回终端。