有时我尝试从Xcode运行Vapor应用程序时会出现此错误.重新打开Xcode没有帮助,只重新启动系统.这是框架的错误吗?我该怎么做才能防止这种情况发生?
我正在尝试使用Swift和Vapor框架编写服务器端应用程序.但是,我无法弄清楚,如何使用Vapor提供静态文件.将它们移动到Public
or Resources
目录是不够的.
我怎样才能做到这一点?
UPD. 我执行了Tanner Nelson建议的步骤,但它仍然无效.
到目前为止我尝试了什么:
vapor build
和vapor run
(使用Vapor Toolbox v.6.6).
./build/debug/App
从根目录(包含Package.swift
).
Tanner Nelson建议,在编辑方案后运行Xcode 8 beta.
在所有这些情况下我都会收到错误
{"error":true,"message":"Page not found"}
我有vapor_logo.png
一个Public
文件夹里面的文件,也有文件夹里面的Public/images/
文件.我尝试请求它但它失败了.我提出的要求:http://localhost:8080/image/vapor_logo.png
和http://localhost:8080/vapor_logo.png
.但是,其他路线工作正常.
UPD 2.嗯,这就是我的错误.首先,我认为被调用的文件vapor_logo.png
实际上被调用了vapor-logo.png
.其次,当您提出请求时,案件很重要.我也尝试使用名称请求文件IMG_8235.JPG
但写入文件扩展名为jpg
,因此出错了.
所以,回顾一下:如果您遇到与我相同的问题,请遵循Tanner Nelson的回答,并确保所请求文件的名称与磁盘上的文件名完全匹配.
用于服务器+ Xcode 8.1的Swift + Vapor框架
我正在尝试阅读Firebase实时数据库向我的数据库发出HTTP请求,但我得到了许可被拒绝.
以下是这些步骤:
1.使用从"console.developers.google.com"下载的密钥创建JWT签名
2.将POST请求发送到OAuth2服务器并获取访问令牌
3.将GET请求发送到firebase数据库,并从中接收访问令牌OAuth2服务器.
我得到"权限被拒绝",HTTP/1.1 403禁止
// the header of the JSON Web Token (first part of the JWT)
let headerJWT = ["alg":"RS256","typ":"JWT"]
// the claim set of the JSON Web Token
let jwtClaimSet =
["iss":"firebase-adminsdk-kxx5h@fir-30c9e.iam.gserviceaccount.com",
"scope":"https://www.googleapis.com/auth/firebase.database", //is this the correct API to access firebase database?
"aud":"https://www.googleapis.com/oauth2/v4/token",
"exp": expDate,
"iat": iatDate]
drop.get("access") { request in
var accesstoken = "ya29.ElqhA-....XXXX"
let responseFirebase = try drop.client.get("https://fir- 30c9e.firebaseio.com/data/Users.json",
headers: ["Authorization":"Bearer \(accesstoken)"],
query: [:])
print("FirebaseResponse_is \(responseFirebase)")
return "success" …
Run Code Online (Sandbox Code Playgroud) 如何解决我在Vapor 2中遇到的这些OpenSSL/TLS问题?他们阻止我在命令行和Xcode中编译我的项目.
在SPM构建期间:
note: you may be able to install ctls using your system-packager:
brew install ctls
note: you may be able to install ctls using your system-packager:
brew install openssl
Run Code Online (Sandbox Code Playgroud)
SPM构建失败后:
Linking ./.build/debug/Run
ld: library not found for -lcrypto for architecture x86_64
<unknown>:0: error: link command failed with exit code 1 (use -v to see invocation)
<unknown>:0: error: build had 1 command failures
error: exit(1): /Library/Developer/Toolchains/swift-3.1-DEVELOPMENT-SNAPSHOT-2017-03-07-a.xctoolchain/usr/bin/swift-build-tool -f /Users/tanner/Desktop/PackageConfig/.build/debug.yaml
Run Code Online (Sandbox Code Playgroud)
同样在SPM中:
<module-includes>:1:9: note: in file included from <module-includes>:1:
#import "shim.h"
^ …
Run Code Online (Sandbox Code Playgroud) 升级到Swift 3.1后尝试使用Vapor工具箱时崩溃了.
dyld: lazy symbol binding failed: Symbol not found: __TTSfq4n_s___TFVSS13CharacterView38_measureExtendedGraphemeClusterForwardfT4fromVVSS17UnicodeScalarView5Index_Si
Referenced from: /usr/local/bin/vapor
Expected in: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx/libswiftCore.dylib
dyld: Symbol not found: __TTSfq4n_s___TFVSS13CharacterView38_measureExtendedGraphemeClusterForwardfT4fromVVSS17UnicodeScalarView5Index_Si
Referenced from: /usr/local/bin/vapor
Expected in: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx/libswiftCore.dylib
Run Code Online (Sandbox Code Playgroud) 我正在构建一个经典的数据库支持的动态网站,它将允许用户共享潜在客户.
我有点老了,想要使用纯MVC架构来实现我的系统.我正在考虑在纯粹的'V'模式下使用React,Vapor履行'M'和'C'角色.我需要一些帮助来理解如何集成Vapor和React,或者更精确地确定哪些功能最适合驻留.
我的Vapor服务器端应用程序,处理所有安全性,路由,模型(通过Fluent存储在PostgreSQL数据库中)和模型控制器.模型控制器仅向通过中间件层的请求输出纯JSON响应:检查用户访问"命令"的权限(基于数据库中保存的角色配置文件,允许动态更改权限); 验证访问关联记录的权限(基于他们可以成为的组的层次结构); 并记录用户正在执行的操作.
到目前为止,我一直在使用Leaf模板引擎为用户使用的网站生成.html文件.Leaf模板通常只传递一个或两个属性 - 比如将要显示的记录的id,然后我使用一些javascript通过AJAX调用将数据拉回模型控制器.模型控制器和中间件可以访问cookie以满足所有用户身份验证/会话相关的需求.这样可以在模型和视图之间保持非常清晰的分离,并且可以让我更轻松地构建一个称为将来调用模型RESTful接口的移动应用程序.
现在我正在考虑使用React进行Web前端,使用React-Bootstrap库.但说实话,我有点迷失了如何正确地整合这个.例如,渲染页面以显示记录 - 如何传递记录ID(伪代码警告!):
a)我应该创建一个叶子模板,我将id作为参数传递给它.模板只需要一小段javascript就可以将参数传递给react.js脚本?蒸汽方面看起来像:
drop.get("viewRecord", myObject) { request in
let parameters = try Node(node:["objectId": myObject?.id.makeNode()])
return try webApp.view.make("viewObject", parameters)
}
Run Code Online (Sandbox Code Playgroud)
而.leaf模板有点像:
<script ...>
var objectID = #(viewObject.id)
</script>
Run Code Online (Sandbox Code Playgroud)
b)或者我应该进行调用,例如,我将id作为URL参数传递,然后我将使用一些小的javascript提取并传递给react组件:
drop.get("viewRecord", myObject) { request in
return Response(redirect: "/viewObject.html", myObject?.Id)
}
Run Code Online (Sandbox Code Playgroud)
c)Vapor中的其他方式?我错过了React的观点吗?我认为它的目的是关注前端和后端不可知,但React Router建议它也需要一些后端工作吗?
d)放弃反应,并说贴叶?
在最后一点 - 如果我采用React方式,我是否会为每个"屏幕"创建一个.jsx文件(转换为.js),我会为其构建一个叶子模板?如果是这样,我将如何通过引用公共元素(例如react和react-bootstrap组件)来减少文件大小.目前我正在使用Webpack生成一个.js文件.我假设我不会使用React路由器,因为我使用Vapor.
对不起,如果其中一些是非常基本的,但我对后端更加满意,但希望前端也能很好地设计,并且最大限度地分担责任.
谢谢你的想法!
我正在关注这些家伙Martin Lasek Tutorials,现在我正在"图片上传".似乎没人能回答"如何上传i Vapor 3图像"的问题
Db连接正常,所有其他值都保存.
这是我的创建方法:
func create(_ req: Request) throws -> Future<Response> {
return try req.content.decode(Question.self).flatMap { question in
return question.save(on: req).map { _ in
return req.redirect(to: "/form")
}
}
}
Run Code Online (Sandbox Code Playgroud)
和型号:
final class Question: PostgreSQLModel {
var id: Int?
var questionText: String
var answers: [String]
var theme: String?
var imageName: String?
var imageData: File?
init(id: Int? = nil, questionText: String, answers: [String], theme: String, imageName: String?, imageData: File?) {
self.id = id
self.questionText = questionText
self.answers …
Run Code Online (Sandbox Code Playgroud) 我是Swift后端的新手,并且认为我会快速使用Vapor在一个侧面项目上运行起来......我跑了vapor new WebServer --template=auth-template
,现在我正在试图找出类似return \.email
意味着什么.有关更多上下文,我正在查看WebServer> Sources> App> Models> Users.swift:
import Authentication
import FluentSQLite
import Vapor
/// Allows users to be verified by basic / password auth middleware.
extension User: PasswordAuthenticatable {
/// See `PasswordAuthenticatable`.
static var usernameKey: WritableKeyPath<User, String> {
return \.email
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
这是User类的定义:
/// A registered user, capable of owning todo items.
final class User: SQLiteModel {
// {omit extra code} ...
var email: String
// {omit extra code} ...
/// Creates …
Run Code Online (Sandbox Code Playgroud) 我有一个使用服务器端 swift vapor 3 开发的 Web 应用程序,该应用程序在我的 Mac 上本地运行。我想在与 Mac 相同的 wifi 上使用我的 iPhone 访问它。我怎样才能做到这一点。我尝试使用http://<the ip of my Mac on local network>:8080
但没有工作,即使防火墙完全关闭。提前致谢。
我正在按照Vapor文档中的MySQL包的入门部分进行操作,我可以一步一步地跟进,因此,我已经成功建立了与MySQL数据库的连接,使用这样的自定义数据库凭据:
/// Register providers first
try services.register(FluentMySQLProvider())
// MySQL database
let mySQLConfig = MySQLDatabaseConfig(hostname: "localhost",
port: 3306,
username: "root",
password: "thisismyrootpassword",
database: "lol_database",
capabilities: .default,
characterSet: MySQLCharacterSet.utf8_general_ci,
transport: MySQLTransportConfig.cleartext)
services.register(mySQLConfig)
Run Code Online (Sandbox Code Playgroud)
基于MySQLDatabaseConfig
对象的文档,我无法找到是否可以基于Unix Socket配置连接到MySQL数据库.
我能够在生产环境下为应用程序提供的只是数据库名称,用户名,密码和套接字路径,它们将在表单中 /cloudsql/project1:us-central1:instance1
有关更多参考,我要做的是根据本教程从Google Cloud App Engine灵活环境连接到SQL数据库:https://cloud.google.com/appengine/docs/flexible/nodejs/using- cloud-sql#setting_up_your_local_environment环境当然是Vapor仍然是数据库客户端与数据库服务器建立连接的唯一方法.
谢谢您的帮助.