Application 对象
AdonisJS 的应用程序模块负责在不同的已知环境中启动应用程序。
当你从 server.ts
文件启动 HTTP 服务器或运行 node ace serve
命令时,将为 web 环境启动应用程序。
而运行 node ace repl
命令会在 repl 环境中启动应用程序。所有其他命令在 console 环境中启动应用程序。
应用程序的环境在决定执行哪些操作方面起着至关重要的作用。例如,web 环境不注册或引导 Ace 提供程序。
你可以使用 environment 属性查看应用程序的当前环境。以下是所有应用程序环境的列表。
web
环境是指为 HTTP 服务器启动的进程。console
环境是指 Ace 命令,REPL 命令除外。repl
环境是指使用node ace repl
命令启动的进程。test
环境是指使用node ace test
命令启动的进程。
import Application from '@ioc:Adonis/Core/Application'
console.log(Application.environment)
生命周期
以下是应用程序的生命周期。
一旦应用程序状态设置为 booted
或 ready
,你就可以访问 IoC 容器绑定。在引导状态之前访问容器绑定会导致异常。
例如,如果你有一个服务提供者想要解析容器的绑定,你应该在 boot
或 ready
方法中编写导入语句。
注意:顶级导入将不起作用
import { ApplicationContract } from '@ioc:Adonis/Core/Application'
import Route from '@ioc:Adonis/Core/Route'
export default class AppProvider {
constructor(protected app: ApplicationContract) {}
public async boot() {
Route.get('/', async () => {})
}
}
注意:将导入移动到引导方法内部
import { ApplicationContract } from '@ioc:Adonis/Core/Application'
export default class AppProvider {
constructor(protected app: ApplicationContract) {}
public async boot() {
const { default: Route } = await import('@ioc:Adonis/Core/Route')
Route.get('/', async () => {})
}
}
版本
你可以使用 version
和 adonisVersion
属性访问应用程序和框架版本。
version
属性是指你的应用程序的 package.json
文件中的版本。 adonisVersion
属性是指 @adonisjs/core
包的安装版本。
import Application from '@ioc:Adonis/Core/Application'
console.log(Application.version!.toString())
console.log(Application.adonisVersion!.toString())
这两个版本属性都表示为带有 major
、minor
和 patch
子属性的对象。
console.log(Application.version!.major)
console.log(Application.version!.minor)
console.log(Application.version!.patch)
节点环境
你可以使用 nodeEnvironment
属性访问节点环境。该值是对 NODE_ENV
环境变量的引用。但是,该值被进一步统一化以保持一致。
import Application from '@ioc:Adonis/Core/Application'
console.log(Application.nodeEnvironment)
NODE_ENV | 统一化为 |
---|---|
dev | development |
develop | development |
stage | staging |
prod | production |
testing | test |
此外,你还可以使用以下属性作为了解当前环境的速记。
inProduction
Application.inProduction
// 相同于
Application.nodeEnvironment === 'production'
inDev
Application.inDev
// 相同于
Application.nodeEnvironment === 'development'
inTest
Application.inTest
// 相同于
Application.nodeEnvironment === 'test'
创建项目目录路径
你可以使用应用程序模块来创建已知项目目录的绝对路径。
configPath
创建一个相对于 config
目录的绝对路径。
Application.configPath('shield.ts')
publicPath
创建一个相对于 public
目录的绝对路径。
Application.publicPath('style.css')
databasePath
创建一个相对于 database
目录的绝对路径。
Application.databasePath('seeders/Database.ts')
migrationsPath
创建一个相对于 migrations
目录的绝对路径。
Application.migrationsPath('users.ts')
seedsPath
创建一个相对于 seeds
目录的绝对路径。
Application.seedsPath('Database.ts')
resourcesPath
创建一个相对于 resources
目录的绝对路径。
Application.resourcesPath('scripts/app.js')
viewsPath
创建一个相对于 views
目录的绝对路径。
Application.viewsPath('welcome.edge')
startPath
创建一个相对于 start
目录的绝对路径。
Application.startPath('routes.ts')
tmpPath
创建一个相对于应用程序 tmp
目录的绝对路径。
Application.tmpPath('uploads/avatar.png')
makePath
创建一个相对于应用程序根目录的绝对路径。
Application.makePath('app/Middleware/Auth.ts')
其他属性
以下是应用模块上的属性列表。
appName
应用程序的名称。它指的是应用程序的 package.json
文件中的 name
属性。
Application.appName
appRoot
应用程序根目录的绝对路径。
Application.appRoot
rcFile
对已解析的 AdonisRc 文件 的引用。
Application.rcFile.providers
Application.rcFile.raw
container
对 IoC 容器实例的引用。
Application.container
helpers
对助手模块的引用。
Application.helpers.string.snakeCase('helloWorld')
你也可以直接访问 helpers 模块。
import { string } from '@ioc:Adonis/Core/Helpers'
string.snakeCase('helloWorld')
logger
引用应用程序记录器。
Application.logger.info('hello world')
你也可以直接访问记录器模块。
import Logger from '@ioc:Adonis/Core/Logger'
Logger.info('hello world')
config
对配置模块的引用。
Application.config.get('app.secret')
你也可以直接访问配置模块。
import Config from '@ioc:Adonis/Core/Config'
Config.get('app.secret')
env
引用 env 模块。
Application.env.get('APP_KEY')
你也可以直接访问 env 模块。
import Env from '@ioc:Adonis/Core/Env'
Env.get('APP_KEY')
isReady
查找应用程序是否处于就绪状态。当 isReady
为 false 时,它在内部用于停止接受新的 HTTP 请求。
Application.isReady
isShuttingDown
查找应用程序是否处于关闭过程中。
Application.isShuttingDown
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。