Vapor 2.0 - Droplet

5485 단어
Vapor 2.0 - 문서 디렉토리로 이동Droplet은 서비스 용기로 당신에게 많은 Vapor 도구를 제공할 수 있습니다.그것은 루트 등록, 서버 시작, 추가 중간부품 (middleware) 등을 책임진다.
일반적으로 응용 프로그램에는 Droplet 하나만 표시됩니다.단, 고급 용례에 대해서는 여러 개를 만들 수 있습니다.

초기화(Initialization)

Droplet 실례를 만드는 데 필요한 유일한 것은 Vapor를 가져오는 것입니다.
import Vapor

let drop = try Droplet()

// your magic here

try drop.run()
Droplet의 생성은 일반적으로 main.swift 파일에서 발생합니다.
노트는 간단하게 보기 위해 대부분의 문서 예시 코드는 main.swift 파일만 사용합니다.Swift 의존 패키지 관리자의 개념적 개요에서 의존 패키지와 모듈에 대한 더 많은 내용을 읽을 수 있습니다.

환경(Environment)


환경(environment)은droplet의 설정을 통해 접근할 수 있습니다.응용 프로그램이 실행 중인 현재 환경을 포함합니다.통상적으로 개발, 테스트 또는 생산이다.
if drop.config.environment == .production {
    ...
}

환경 영향 구성(Config) 및 로깅(Logging)기본값은 개발 환경입니다.변경하려면 --env= flag를 매개 변수로 사용합니다.
vapor run serve --env=production

Xcode에 있으면 scheme 편집기를 통해 매개 변수를 전달할 수 있습니다.
경고 디버그 로그는 프로그램이 초당 처리하는 요청 수를 줄일 수 있습니다.비임계 로그를 침묵하도록 생산 모드를 허용합니다.

Config 디렉토리

workDir 속성은 응용 프로그램의 현재 작업 디렉터리 경로를 포함합니다.이 속성을 사용하여 Resources, PublicConfig과 같은 프로젝트와 관련된 폴더를 찾습니다.
print(drop.workDir) // /var/www/my-project/

대부분의 경우 Vapor는 자동으로 작업 디렉토리를 결정합니다.그러나 고급 용례에 사용할 수 있도록 수동으로 설정해야 할 수도 있습니다.Droplet의 초기화를 통해 작업 디렉터리를 덮어쓰거나 --workdir을 통해 할 수 있습니다.
vapor run serve --workdir="/var/www/my-project"

손질 속성(Modifying Properties)

Droplet의 속성은 프로그래밍 방식이나 설정을 통해 변경할 수 있습니다.

Programmatic

Droplet의 속성은 상수이며 init 방법으로 덮어쓸 수 있습니다.
let drop = try Droplet(server: MyServerType.self)

여기에서 Droplet에 사용된 서버 형식이 사용자 정의 형식으로 변경되었습니다.Droplet을 실행하면 이 사용자 정의 서버 형식은 기본 서버가 아니라 안내됩니다.
init 방법을 수동으로 사용하면 설정된 속성을 덮어쓸 수 있음을 경고합니다.

Configurable

Droplet의 속성을 수정하려면 addConfigurable을 사용할 수 있습니다.예를 들어 생산 중에 오류 로그를 보내고 싶지만, 개발할 때 받은 편지함에 스팸메일을 보내고 싶지 않다.
let config = try Config()
config.addConfigurable(log: MyEmailLogger.init, name: "email")

let drop = Droplet(config)
DropletConfig/droplet.json 파일이 전자 메일 로그 레코더를 가리키는 것을 수정할 때까지 기본 로그 레코더를 계속 사용합니다.만약 이것이 Config/production/droplet.json이라면, 당신의 기록기는 생산에서만 사용됩니다.
{
    "log": "email"
}

지원되는 속성(Supported Properties)
Property
Type droplet.json key
Config Initializable
server
ServerProtocol.Type
server
no
client
ClientProtocol.Type
client
no
log
LogProtocol
log
yes
hash
HashProtocol
hash
yes
cipher
CipherProtocol
cipher
yes
middleware
Middleware
middleware.[server,client]
no
console
ConsoleProtocol
console
yes
cache
CacheProtocol
cache
yes
Example
Vapor의 구성 가능한 속성을 보여 주는 사용자 정의 로그 레코더를 만듭니다.AllCapsLogger.swift
final class AllCapsLogger: LogProtocol {
    var enabled: [LogLevel] = []
    func log(_ level: LogLevel, message: String, file: String, function: String, line: Int) {
        print(message.uppercased + "!!!")
    }
}

현재 addConfigurable의 로그 방법을 사용하여 로그를 Droplet에 추가합니다.main.swift
let config = try Config()
config.addConfigurable(log: AllCapsLogger(), name: "all-caps")

let drop = try Droplet(config)
droplet.json에서 "log" 속성을 "all-caps"으로 설정하면 새 로그 프로그램이 사용됩니다.Config/development/droplet.json
{
    "log": "all-caps"
}

여기서, 우리는 개발 환경에서만 우리의 로그 기록기를 설정합니다.다른 모든 환경에서는 Vapor의 기본 로그 레코더를 사용합니다.
Config Initializable
사용자 정의 형식을 프로필에서 초기화할 수 있습니다.
앞의 예에서 Droplet에 추가하기 전에 AllCapsLogger을 초기화합니다.
만약 우리가 프로젝트가 로그 메시지마다 몇 개의 느낌표를 추가할 수 있도록 허락하기를 원한다면.AllCapsLogger.swift
final class AllCapsLogger: LogProtocol {
    var enabled: [LogLevel] = []
    let exclamationCount: Int

    init(exclamationCount: Int) {
        self.exclamationCount = exclamationCount
    }

    func log(_ level: LogLevel, message: String, file: String, function: String, line: Int) {
        print(message.uppercased + String(repeating: "!", count: exclamationCount))
    }
}

extension AllCapsLogger: ConfigInitializable {
   init(config: Config) throws {
        let count = config["allCaps", "exclamationCount"]?.int ?? 3
        self.init(exclamationCount: count)
   } 
}

Note config의 첫 번째 매개변수는 파일 이름입니다.
현재 우리는logger와 ConfigInitializable을 결합시켰습니다. 우리는 유형 이름을 addConfigurable에 전달할 수 있습니다.main.swift
let config = try Config()
config.addConfigurable(log: AllCapsLogger.self, name: "all-caps")

let drop = try Droplet(config)

현재 Config 폴더에 allCaps.json이라는 파일을 추가하면 logger를 설정할 수 있습니다.allCaps.json
{
    "exclamationCount": 5
}

이러한 추상적인 설정이 있으면, 응용 프로그램이 서로 다른 환경에서의 기능을 쉽게 변경할 수 있으며, 이 값을 원본 코드에 하드코딩할 필요가 없다.

좋은 웹페이지 즐겨찾기