Включение доступа к базе данных MySQL с помощью разъема Perfect — MySQL

Я собираюсь создать веб-приложение с помощью Swift. У меня проблема с подключением к MySQL. Я использую PhpMyAdmin для управления базами данных MySQL. Мне кажется, что лучший способ — это использовать Perfect. Я сделал все в соответствии с Perfect-MySQL Connector ! К сожалению, у меня есть проблема с вызовом функции useMysql в main.быстрый. Интересно, правильно ли это написано? Я вызываю функцию useMysql в файле main.быстрый:

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

Однако в файле mysql_quickstart.swift определим функцию с двумя аргументами:

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, кажется, никогда не выполняется. Я знаю, что это не хорошая привычка, чтобы прикрепить код из файлов проекта, но, возможно, это будет полезно.
Вот мой код какие предложения? Спасибо заранее.

Я также нашел другой идеальный-MySQL разъем учебник, и я не уверен, какой путь лучше? Кстати, интересно, хорошо ли использовать несколько фреймворков в одном проекте? Например, Perfect и Kitura или Vapor?

Отредактировано:
Что вы думаете, чтобы использовать его таким образом?

// Register your own routes and handlers
var routes = Routes()
routes.add(method: .get, uri: "/", handler: {
        request, response in
        response.setHeader(.contentType, value: "text/html")
        response.appendBody(string: "<html><title>Hello, world!</title><body>Hello, world!</body></html>")
        //This route will be used to fetch data from the mysql database
        useMysql(request, response: response)
        response.completed()
    }
)

2 ответа

  1. Две вещи, своп из функции useMysql с простым результатом печати и возвращением функции HTML.

    Во-вторых, я предлагаю смотреть (или использовать) уровень абстракции MySQL StORM.

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

    Вполне возможно, это разрешения, доступ к хосту или порт.

  2. Главная.Быстрый:-

    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 {
     }
    }
    

    Вход.Быстрый

    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
     }
    
    
    }
    

    Hit POST API like
    localhost: 8080 / admin / api/v1 / login

    и я получил ответ:

    {
    "status": 200,
    "succcess": true,
    "result": [
        {
            "phone_number": "84747474574",
            "email": "myemail@swift.com"
        }
    ]
    
    
    }
    

    Убедитесь, что вы передаете правильные значения для подключения к базе данных

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