Rumah > Soal Jawab > teks badan
Atas sebab tertentu saya tidak dapat mewujudkan sambungan mudah ke pelayan. Saya memasang pangkalan data MySQL Community 8.0 terkini bersama-sama dengan Node.JS menggunakan tetapan lalai.
Ini kod node.js saya
var mysql = require('mysql'); var con = mysql.createConnection({ host: "localhost", user: "root", password: "password", insecureAuth : true }); con.connect(function(err) { if (err) throw err; console.log("Connected!"); });
Berikut ialah ralat yang terdapat dalam command prompt:
C:Usersmysql-test>node app.js C:Usersmysql-testnode_modulesmysqllibprotocolParse r.js:80 throw err; // Rethrow non-MySQL errors ^ Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client at Handshake.Sequence._packetToError (C:Usersmysql- testnode_modulesmysqllibprotocolsequencesSequence.js:52:14) at Handshake.ErrorPacket (C:Usersmysql-testnode_mo dulesmysqllibprotocolsequencesHandshake.js:130:18) at Protocol._parsePacket (C:Usersmysql-testnode_mo dulesmysqllibprotocolProtocol.js:279:23) at Parser.write (C:Usersmysql-testnode_modulesmys qllibprotocolParser.js:76:12) at Protocol.write (C:Usersmysql-testnode_modulesm ysqllibprotocolProtocol.js:39:16) at Socket.<anonymous> (C:Usersmysql-testnode_modul esmysqllibConnection.js:103:28) at Socket.emit (events.js:159:13) at addChunk (_stream_readable.js:265:12) at readableAddChunk (_stream_readable.js:252:11) at Socket.Readable.push (_stream_readable.js:209:10) -------------------- at Protocol._enqueue (C:Usersmysql-testnode_module smysqllibprotocolProtocol.js:145:48) at Protocol.handshake (C:Usersmysql-testnode_modul esmysqllibprotocolProtocol.js:52:23) at Connection.connect (C:Usersmysql-testnode_modul esmysqllibConnection.js:130:18) at Object.<anonymous> (C:Usersmysql-testserver.js: 11:5) at Module._compile (module.js:660:30) at Object.Module._extensions..js (module.js:671:10) at Module.load (module.js:573:32) at tryModuleLoad (module.js:513:12) at Function.Module._load (module.js:505:3) at Function.Module.runMain (module.js:701:10)
Saya telah membaca sesuatu seperti: https://dev.mysql.com/doc/refman/5.5/en/old-client.html https://github.com/mysqljs/mysql/issues/1507
Tetapi saya masih tidak pasti bagaimana untuk menyelesaikan masalah saya.
P粉1619397522023-10-11 09:08:13
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'
然后 刷新权限
mysql2
(而不是 mysql
)并使用它 - npm我 mysql2
和 mysql = require('mysql2');
. Kita perlu memikirkan dahulu apa yang berlaku.
MySQL 8 menyokong kaedah pengesahan boleh pasang. Secara lalai, salah satu daripadanya bernama caching_sha2_password
的密码,而不是我们的旧 mysql_native_password
(sumber) digunakan. Nampaknya, algoritma penyulitan menggunakan berbilang jabat tangan adalah lebih selamat daripada laluan kata laluan biasa yang digunakan dalam 24. Tahun !
Kini, masalahnya ialah pakej dalam Node mysqljs
(使用 npm i mysql
yang memasang dan menggunakannya dalam kod Node) tidak menyokong kaedah pengesahan lalai baharu ini untuk MySQL 8 lagi. Isunya di sini: https://github.com/mysqljs/mysql/issues/1507 a> Sehingga Julai 2019, masih dibuka tiga tahun kemudian.
Kemas kini Jun 2019: Ada PR baharu dalam mysqljs a> untuk membetulkannya sekarang!
Kemas Kini Februari 2020: Nampaknya dirancang untuk masuk dalam mysqljs versi 3.
Kemas kini Julai 2020: Nampaknya ia belum masuk lagi (sekurang-kurangnya April 2020) , tetapi mendakwa bahawa < a href="https://github.com/sidorares/node-mysql2" rel="noreferrer">node-mysql2 menyokong suis permintaan pengesahan Jika node-mysql2
berfungsi untuk anda, sila tinggalkan komen di bawah - Saya akan mengujinya sendiri kemudian.
Kemas kini April 2021: Masalahnya nampaknya masih wujud, hanya 3 hari yang lalu, seseorang mencipta garpu dan melaksanakannya - tetapi belum secara rasmi dalam pakej mysql.js lagi. Selain itu, berdasarkan komen di bawah, nampaknya pakej mysql2 berfungsi dengan baik dan menyokong penukaran pengesahan dengan betul.
Inilah yang semua orang cadangkan di sini (seperti jawapan terbaik di atas). Anda hanya perlu memasukkan kaedah mysql
并运行一个查询,说明 root
可以使用旧的 mysql_native_password
untuk mengesahkan:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password ...
Berita baiknya ialah, kehidupan menjadi lebih mudah dan anda masih boleh menggunakan alatan lama yang bagus seperti Sequel Pro tanpa sebarang soalan. Tetapi perkaranya ialah, anda tidak mengambil kesempatan daripada sesuatu yang lebih selamat (dan bagus, baca di bawah).
MySQL Ia berfungsi seperti sokongan untuk komunikasi protokol X. )
Sayangnya anda telah berpindah dari pakej lama caching_sha2_password
身份验证的超级按钮。 (只需确保您使用端口 33060
yang setiap daripada kita biasa dan bergantung harap.
Bonusnya ialah apl anda kini lebih selamat dan anda boleh memanfaatkan banyak ciri baharu yang tidak ditawarkan oleh rakan lama kami yang baik! Lihat sahaja
dan anda akan mendapati ia mempunyai banyak ciri seksi baharu yang boleh anda gunakan. Anda hanya perlu membayar harga keluk pembelajaran, yang dijangka datang dengan sebarang peningkatan teknologi. :)mysql
PS. Malangnya, pakej XDevAPI ini belum mempunyai definisi jenis (yang TypeScript faham), jadi jika anda menggunakan
, anda akan menghadapi masalah. Saya cuba menggunakan dts-gen dan dtsmake untuk menjana .d.ts tanpa berjaya. Jadi sila ingat ini. Seperti yang dinyatakan di atas, pakej mysql (pautan pakej NPM) masih mengalami masalah ini (sehingga April 2021). Tetapi pakej mysql2 (pautan pakej NPM) tidak. Jadi berikut mungkin jawapan yang mudah! Nota, Pilihan 3) [Disyorkan] Gantikan "mysql.js" dengan pakej "mysql2.js"
npm un mysql && npm i mysql2
mysql2
是流行的 mysql
的一个分支,但它的受欢迎程度(4 月份 mysql2
每周下载量为 62 万次) 2020 年)已接近原始软件包(2021 年 4 月 mysql
720K muat turun setiap minggu), jadi nampaknya munasabah untuk menukar!
P粉1987499292023-10-11 00:55:10
Laksanakan pertanyaan berikut dalam MYSQL Workbench
更改用户 'root'@'localhost' 通过 mysql_native_password BY 'password' 进行识别;
di mana root
adalah pengguna anda
localhost
sebagai URL anda
dan password
sebagai kata laluan anda
Kemudian jalankan pertanyaan ini untuk memuat semula kebenaran:
刷新权限;
Selepas melakukan ini cuba sambung menggunakan nod.
Jika ini tidak berkesan, cuba tanpa bahagian @'localhost'
.