Как подключиться к базе данных MySQL с помощью Swift-Nio

Я использовал node js для подключения сервера mysql, и он работает хорошо. Я использовал API, разработанный в node js и используемый в локальном приложении macOS. Проблема заключается в том, что запрос данных из базы данных mysql на рабочем месте выполняется быстро, но в API узла js это очень задержка. Итак, мне нужно подключить mysql db напрямую из моего приложения macOS.

Я установил mysql отсюда: https://www.mysql.com/downloads/

Также я использую рабочий стол mysql для проверки соединения, и он подключается без проблем. Итак, в настройках системы у меня есть расширения mysql для запуска и остановки сервера mysql. В расширении я вижу, что корневая папка находится в /usr/local/mysql

Я создал новый проект и добавил быстрый пакет mysql-nio отсюда

В этом репозитории их ссылка на документ API не работает https://api.vapor.codes/mysql-nio/мастер/MySQLNIO/ Но я нашел правильную ссылку https://api.vapor.codes/mysql-nio/main/MySQLNIO/MySQLConnection/

Используя эту ссылку, я попытался подключиться к приведенному ниже коду,

//https://github.com/vapor/mysql-nio

import Cocoa
import MySQLNIO

class ViewController: NSViewController {

    
    private var group: EventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 4)
     
    private var eventLoop: EventLoop {

        return self.group.next()
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
   
        do{
            
            let socketAddress = try SocketAddress(ipAddress: "127.0.0.1", port: 3306)
            
            let logger = Logger(label: "MyLogger")
            let connection = MySQLConnection.connect(to: socketAddress, username: "root", database: "MyDB", password: "3$@sdRt34@sdf$dja2", tlsConfiguration: nil, serverHostname: nil, logger: logger, on: eventLoop)                
            connection.whenComplete { result in
                
                switch result{
                    
                case .success(let connection):
                    
                    print("Success! Status closed: \(connection.isClosed)")
                    
                case .failure(let error):
                     
                    DispatchQueue.main.async {
                        
                        NSApp.presentError(error)
                    }
                }
            }
            
        }catch{
            
            NSApp.presentError(error)
        }
        
    }
}

Ошибка:

The operation couldn’t be completed. (NIOCore.IOError error 1.)

Я добавил App Transport Security Settings -> Allow Arbitrary Loads в YES в проекте xcode info

Я не знаю, как решить эту проблему. Не могли бы вы помочь мне решить эту проблему? Благодарю вас!

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
0
34
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В песочнице приложения вам нужно включить «Исходящие подключения (клиент)», и тогда все должно работать.

outgoing connections

К сожалению, из-за Быстрая ошибка распечатка ошибок Swift на самом деле бесполезна, если вы это сделаете localizedDescription. Чтобы увидеть настоящую ошибку, вам нужно добавить что-то вроде print(error) в обработчик ошибок.

Посмотрите, как на скриншоте ниже print(error) печатает действительно полезный текст, например connect(descriptor:addr:size:): Operation not permitted (errno: 1), если я не отмечаю «Исходящие подключения (клиент)»?

XCode console

Да, большое спасибо! Я совершенно забыл об этом.

iDeveloper 06.05.2022 23:23

Другие вопросы по теме