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)

生命周期

以下是应用程序的生命周期。

一旦应用程序状态设置为 bootedready,你就可以访问 IoC 容器绑定。在引导状态之前访问容器绑定会导致异常。

例如,如果你有一个服务提供者想要解析容器的绑定,你应该在 bootready 方法中编写导入语句。

注意:顶级导入将不起作用

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 () => {})
  }
}

版本

你可以使用 versionadonisVersion 属性访问应用程序和框架版本。

version 属性是指你的应用程序的 package.json 文件中的版本。 adonisVersion 属性是指 @adonisjs/core 包的安装版本。

import Application from '@ioc:Adonis/Core/Application'

console.log(Application.version!.toString())
console.log(Application.adonisVersion!.toString())

这两个版本属性都表示为带有 majorminorpatch 子属性的对象。

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

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/adonisjs/5.x/fu...

译文地址:https://learnku.com/docs/adonisjs/5.x/fu...

上一篇 下一篇
贡献者:5
讨论数量: 0
发起讨论 只看当前版本


暂无话题~