Я использовал 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
Я не знаю, как решить эту проблему. Не могли бы вы помочь мне решить эту проблему? Благодарю вас!
В песочнице приложения вам нужно включить «Исходящие подключения (клиент)», и тогда все должно работать.
К сожалению, из-за Быстрая ошибка распечатка ошибок Swift на самом деле бесполезна, если вы это сделаете localizedDescription
. Чтобы увидеть настоящую ошибку, вам нужно добавить что-то вроде print(error)
в обработчик ошибок.
Посмотрите, как на скриншоте ниже print(error)
печатает действительно полезный текст, например connect(descriptor:addr:size:): Operation not permitted (errno: 1)
, если я не отмечаю «Исходящие подключения (клиент)»?
Да, большое спасибо! Я совершенно забыл об этом.