我的问题是Vapor JSON函数调用return JSON(["foo":"bar"])vs的区别是什么return try JSON(node: ["foo":"bar"])?
两种变体都有效,正确的方法是什么?
将它们混合喜欢return JSON(node: ["foo":"bar"])或return try JSON(["foo":"bar"])会令构建失败.
import Vapor
let drop = Droplet()
drop.get("json") { req in
return JSON(["foo": "bar"])
}
drop.run()
Run Code Online (Sandbox Code Playgroud) 我开始使用Xcode中的Vapor来构建一个简单的服务器来支持我的应用程序.我试图了解如何正确构建我可以返回的JSON对象,例如在get请求中.
我有以下内容:
drop.get { request in
let date:TimeInterval = Date().timeIntervalSince1970
let dictionary:[String:String] = ["name":"e2","age":"3"]
return try JSON(node: [
"time":date,
"t1" : "abc",
"t2" : dictionary
])
}
Run Code Online (Sandbox Code Playgroud)
这不起作用,它告诉我"参数标签(节点:)不匹配任何可用的重载"
如何构建包含字符串,数字和嵌套字典的JSON,如上所述?
我看到vapor,这crypto.json是用任何项目创建的一部分vapor toolbelt
{
"hash": {
"method": "sha256",
"key": "password"
},
"cipher": {
"method": "chacha20",
"key": "passwordpasswordpasswordpassword",
"iv": "password"
}
}
Run Code Online (Sandbox Code Playgroud)
是否应更新任何部署?
我不断收到错误Cannot invoke initializer for type 'posix_spawn_files_actions_t' with no arguments安装蒸汽/ MySQL的,在这行代码后,系统会提示Terminal.swift:var fileActions = posix_spawn_file_actions_t().有谁知道什么可能提示这个?
我正在尝试创建一个模型 ( MySQLStringModel) 并为其设置一个 id(String ?类型)。控制台中没有错误或任何其他消息,并且save(on: req)工作成功,但模型没有出现在数据库的表中。什么可能是错的?
func create(_ req: Request, person: Person) throws -> Future<Person> {
return Person(id: person.id, name: person.name).save(on: req)
}
Run Code Online (Sandbox Code Playgroud)
Ps:当我使用带有Int?id 的MySQLModel 时一切正常 ,并且我不直接设置此 id(它使用 autoincreament 自动设置)
我正在尝试使用SQLite设置Vapor 3项目。
在configure.swift文件中,我具有与sqlite相关的以下设置:
try services.register(FluentSQLiteProvider())
...
// Get the root directory of the project
// I have verified that the file is present at this path
let path = DirectoryConfig.detect().workDir + "db_name.db"
let sqlite: SQLiteDatabase
do {
sqlite = try SQLiteDatabase(storage: .file(path: path))
print("connected") // called
} catch {
print(error) // not called
return
}
var databases = DatabasesConfig()
databases.add(database: sqlite, as: .sqlite)
services.register(databases)
Run Code Online (Sandbox Code Playgroud)
在数据库中,有一个名为的表posts,我想查询以下表并返回所有条目:
这是Post实现内部/来源/应用/型号/:
final class Post: Content {
var …Run Code Online (Sandbox Code Playgroud) 我使用 docker 为一个项目编写 Vapor、PostgreSQL 和 Nginx,我的 docker-compose.yml 像这样:
version: "3.6"
services:
vapor:
build:
context: ./vapor
image: ${CURRENT_VAPOR_IMG}
ports:
- 8080:8080
volumes:
- ${HOST_ROOT}:${CONTAINER_ROOT}
working_dir: ${CONTAINER_ROOT}
tty: true
entrypoint: bash
networks:
- x-net
nginx:
build:
context: ./nginx
image: ${CURRENT_NGINX_IMG}
ports:
- ${HOST_HTTP_PORT}:80
volumes:
- ${HOST_ROOT}:${CONTAINER_ROOT}
networks:
- x-net
psql:
image: ${CURRENT_DB_IMG}
ports:
- 5432:5432
environment:
- POSTGRES_DB=xxx
- POSTGRES_USER=xxx
- POSTGRES_PASSWORD=pass
volumes:
- ~/x/x-db:/var/lib/postgresql/data
networks:
- x-net
networks:
x-net:
driver: bridge
Run Code Online (Sandbox Code Playgroud)
运行docker-compose up启动所有容器后,进入到vapor的容器中build&&运行项目,控制台会提示错误:
NIO.ChannelError.connectFailed(NIO.NIOConnectionError(host: "localhost", port: 5432, dnsAError: nil, dnsAAAAError: nil, …Run Code Online (Sandbox Code Playgroud) 如何.env在运行RunVapor 项目的方案时强制 Xcode 加载文件?
我--env production在方案配置中添加了运行参数,但它也没有改变行为。只有在 Xcode 环境变量下设置才有效(但这不是我的目标,因为当我在 Xcode 之外重建蒸汽项目时它们会被重置。
我已经定义了几个变量,但是在项目运行时它们无法加载(密钥不存在)
编辑:
更新问题以说明我使用 Vapor 3
如何将 WHERE x LIKE $xyz 添加到查询构建器?
我开始
let searchQuery = try? request.query.get(String.self, at: "s")
...
query.where(\Talk.title, SwifQL.like(searchQuery))
Run Code Online (Sandbox Code Playgroud)
但是接下来我要搜索不区分大小写的字符串我有错误:
[ ERROR ] PostgreSQLError.server.error.scanner_yyerror: GET /testroute?s=Swift syntax error at or near "$8" (ErrorMiddleware.swift:26)
我有一组值映射到多个承诺,每个承诺给我一个 EventLoopFuture。所以我最终得到了一个具有可变大小 [EventLoopFuture] 的方法,我需要所有响应都成功才能继续。如果其中一个或多个返回错误,我需要执行错误场景。
在继续成功路径或错误路径之前,如何等待整个 [EventLoopFuture] 完成?