Vapor 2.0 - Droplet
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
, Public
및 Config
과 같은 프로젝트와 관련된 폴더를 찾습니다.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)
Droplet
은 Config/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
}
이러한 추상적인 설정이 있으면, 응용 프로그램이 서로 다른 환경에서의 기능을 쉽게 변경할 수 있으며, 이 값을 원본 코드에 하드코딩할 필요가 없다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
import Vapor
let drop = try Droplet()
// your magic here
try drop.run()
환경(
environment
)은droplet의 설정을 통해 접근할 수 있습니다.응용 프로그램이 실행 중인 현재 환경을 포함합니다.통상적으로 개발, 테스트 또는 생산이다.if drop.config.environment == .production {
...
}
환경 영향 구성(Config) 및 로깅(Logging)기본값은 개발 환경입니다.변경하려면
--env=
flag를 매개 변수로 사용합니다.vapor run serve --env=production
Xcode에 있으면 scheme 편집기를 통해 매개 변수를 전달할 수 있습니다.
경고 디버그 로그는 프로그램이 초당 처리하는 요청 수를 줄일 수 있습니다.비임계 로그를 침묵하도록 생산 모드를 허용합니다.
Config 디렉토리 workDir
속성은 응용 프로그램의 현재 작업 디렉터리 경로를 포함합니다.이 속성을 사용하여 Resources
, Public
및 Config
과 같은 프로젝트와 관련된 폴더를 찾습니다.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)
Droplet
은 Config/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
}
이러한 추상적인 설정이 있으면, 응용 프로그램이 서로 다른 환경에서의 기능을 쉽게 변경할 수 있으며, 이 값을 원본 코드에 하드코딩할 필요가 없다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
print(drop.workDir) // /var/www/my-project/
vapor run serve --workdir="/var/www/my-project"
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)
Droplet
은 Config/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
}
이러한 추상적인 설정이 있으면, 응용 프로그램이 서로 다른 환경에서의 기능을 쉽게 변경할 수 있으며, 이 값을 원본 코드에 하드코딩할 필요가 없다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
let config = try Config()
config.addConfigurable(log: MyEmailLogger.init, name: "email")
let drop = Droplet(config)
{
"log": "email"
}
final class AllCapsLogger: LogProtocol {
var enabled: [LogLevel] = []
func log(_ level: LogLevel, message: String, file: String, function: String, line: Int) {
print(message.uppercased + "!!!")
}
}
let config = try Config()
config.addConfigurable(log: AllCapsLogger(), name: "all-caps")
let drop = try Droplet(config)
{
"log": "all-caps"
}
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)
}
}
let config = try Config()
config.addConfigurable(log: AllCapsLogger.self, name: "all-caps")
let drop = try Droplet(config)
{
"exclamationCount": 5
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.