2016-11-01 8 views
0

Swiftを使用してWebアプリケーションを作成します。 MySQLとの接続に問題があります。私は、MySQLデータベース管理のためにPhpMyAdminを使用します。最善の方法はPerfectを使うことです。私はPerfect - MySQL Connectorに従ってすべてをやった!残念ながら、main.swiftで関数useMysqlを呼び出す際に問題があります。私はそれが正しく書かれているかどうか疑問です。私は、ファイルmain.swiftに機能useMysqlを呼び出す:Perfect - MySQL Connectorを使用してMySQLデータベースへのアクセスを有効にする

//This route will be used to fetch data from the mysql database 
routes.add(method: .get, uri: "/use", handler: useMysql) 

ただし、ファイルmysql_quickstart.swiftでは、2つの引数を持つ関数を定義:

public func useMysql(_ request: HTTPRequest, response: HTTPResponse) 
{ 
//function body 
} 

を私はわからないが、多分私はこの方法でそれを呼び出す必要があります? -

routes.add(method: .get, uri: "/use", handler: useMysql(request: object of HTTPRequest, response: object of HTTPResponse)) 

私はエラーを起こしませんが、useMysqlは決して実行されないようです。私は、プロジェクトのファイルからコードを付けるのは良い習慣ではないが、おそらく有用であるかもしれないという事実を認識している。 Here is my code提案がありますか?前もって感謝します。

私は他のPerfect - MySQL Connectorチュートリアルも見つけましたが、どちらの方が良いのか分かりません。 1つのプロジェクトで複数のフレームワークを使用することをお勧めしますか?たとえばPerfectとKituraやVaporの両方の場合は?

EDITED: このように使用すると思いますか?

答えて

0

単純な印刷結果でuseMysql関数を置き換え、HTML関数を返すという2つのことがあります。

第2に、私はMySQL Stormの抽象化レイヤーを見てみることをお勧めします。

https://github.com/SwiftORM/MySQL-StORM

それは権限、ホストアクセスや、ポートのかなり可能です。

0

Main.Swift: -

routes.add(method: .post, uri: "/admin/api/v1/login") { (request, response) in 

let email = request.param(name: "email") 
let password = request.param(name: "passwrod") 
let JSON = Login.checkLogin(email: email, password: password) 
do { 
    try response.setBody(json: JSON) 
     .completed() 
} catch { 
} 
} 

Login.Swift

import Foundation 
import PerfectMySQL 
import PerfectLib 

class Login: NSObject { 

class func checkLogin(email: String?, password: String?)-> JSONConvertible { 

var JSON: JSONConvertible? 



if !ServerHelper.isValidEmail(candidate: email) { 

JSON = ServerHelper.getErrorJson(message: KMESSAGE_INVALID_EMAIL_ADDRESS) 
return JSON 


} else if !ServerHelper.isValidPassword(password: password!) { 

JSON = ServerHelper.getErrorJson(message: KMESSAGE_INVALID_PASSWORD) 
return JSON 

} else { 


let mySql = MySQL() 
let connect = mySql.connect(host: "127.0.0.1", user: "root", password: "mypassword", db:"SuperAdmin" , port: 3306, socket: "", flag: 0) 
if !connect { 

JSON = ServerHelper.getErrorJson(message: KMESSAGE_SERVER_ERROR) 
return JSON 
} 

let query = "select email, phone_number from SuperAdmin.Login where email='\(String(describing: email!))' AND password='\(String(describing: password!))'" 

if mySql.query(statement: query) { 

let result = mySql.storeResults 

var jsonResult = [Dictionary<String, Any>]() 

result()?.forEachRow(callback: { (element) in 

var dict = Dictionary<String, Any>() 

if let arrRow = element as? [String] { 

let email = arrRow[0] 
let phone_number = arrRow[1] 
dict["email"] = email 
dict["phone_number"] = phone_number 
jsonResult.append(dict) 
} 
}) 

if jsonResult.count == 0 { 

JSON = ServerHelper.getErrorJson(message: KMESSAGE_NOT_AUTHORIZE) 

} else { 

JSON = ServerHelper.getJson(result: jsonResult) 

} 

} else { 

JSON = ServerHelper.getErrorJson(message: KMESSAGE_NOT_AUTHORIZE) 
return JSON 
} 
mySql.close() 
} 
return JSON 
} 


} 

ヒットPOSTのAPIのような はlocalhost:8080/adminに/ API/V1 /ログイン

と私が得ましたレスポンス:

{ 
"status": 200, 
"succcess": true, 
"result": [ 
    { 
     "phone_number": "84747474574", 
     "email": "[email protected]" 
    } 
] 


} 

データベースに接続するための正しい値が渡されていることを確認してください。

let connect = mySql.connect(host: "127.0.0.1", user: "root", password: "mypassword", db:"SuperAdmin" , port: 3306, socket: "", flag: 0) 
関連する問題