国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開發(fā) > JS > 正文

解決Node.js使用MySQL出現(xiàn)connect ECONNREFUSED 127.0.0.1:3306的問題

2024-05-06 16:35:38
字體:
供稿:網(wǎng)友

前言

最近用 Node 寫一個(gè)小玩意,需要用到 MySQL 數(shù)據(jù)庫(kù),現(xiàn)在用得最廣泛的是 mysql 這個(gè)庫(kù)。然后呢,現(xiàn)在 ORM 這么火,干脆也上 ORM 吧,正好我也不會(huì)可以學(xué)習(xí)一下,于是找到了 Sequelize.js 這個(gè) ORM 庫(kù)。

發(fā)現(xiàn)問題

看看 Sequelize 的文檔,so easy,兩分鐘搞定~

import Sequelize from 'sequelize';let sequelize = new Sequelize('database', 'username', 'password', { host: 'localhost', port: 3306, dialect: 'mysql', pool: {  max: 5,  min: 0,  idle: 10000 }});// ...后面還有一堆懶得貼了

運(yùn)行一下

SequelizeConnectionRefusedError: connect ECONNREFUSED 127.0.0.1:3306

什么鬼,為什么會(huì)出現(xiàn)這個(gè)錯(cuò)誤呢?我明明設(shè)置的是 localhost,為什么會(huì)變成 127.0.0.1?

解決問題

照例先谷歌,確實(shí)發(fā)現(xiàn)了很多人也遇到了這個(gè)問題,解決方法大概有這么幾種:

     1、你丫以為不用裝 MySQL 就能跑了么?快去裝數(shù)據(jù)庫(kù)!

     2、你數(shù)據(jù)庫(kù)運(yùn)行了么你?趕緊 /etc/init.d/mysqld start 運(yùn)行起來

     3、端口寫錯(cuò)了

     4、你是不是開啟了 skip-networking 這個(gè)選項(xiàng)?Remove it !

看到這里,我反應(yīng)過來了,因?yàn)槲业臄?shù)據(jù)庫(kù)不涉及到遠(yuǎn)程訪問,只要使用 Unix socket 通信就夠了,于是就啟用了 skip-networking 讓 MySQL 不監(jiān)聽指定端口。

先科普一下 skip-networking 是什么

Do not listen for TCP/IP connections at all. All interaction with mysqld must be made using named pipes or shared memory (on Windows) or Unix socket files (on Unix). This option is highly recommended for systems where only local clients are permitted.

翻譯一下就是:

不要監(jiān)聽 TCP/IP 連接。所有與 mysqld 的交互必須使用命名管道或共享內(nèi)存(在 Windows 上)或 Unix socket 文件(在 Unix 上)。強(qiáng)烈建議對(duì)只允許本地客戶端的系統(tǒng)使用此選項(xiàng)。

來源

但是為了安全性,我并不想把這個(gè)選擇給移除,難道只好忍痛不用 ORM 了嗎?

因?yàn)榭戳宋臋n,mysql 這個(gè)連接庫(kù)是可以使用 socketPath 這個(gè)屬性指定 Unix 套接字文件,但是 Sequelize.js 沒發(fā)現(xiàn)有關(guān)屬性。

最后只好發(fā) issue,不久就有 dalao 回答說可以用 dialectOptions 設(shè)置 mysql 的屬性。

下面是測(cè)試成功的代碼:

import Sequelize from 'sequelize';let sequelize = new Sequelize('database', 'username', 'password', { host: 'localhost', port: 3306, dialect: 'mysql', dialectOptions: {  socketPath: '/tmp/mysql.sock' // 指定套接字文件路徑 } pool: {  max: 5,  min: 0,  idle: 10000 }});

就是這么簡(jiǎn)單…

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)VeVb武林網(wǎng)的支持。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到JavaScript/Ajax教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 施秉县| 定州市| 绥芬河市| 大丰市| 潮州市| 丰城市| 宣威市| 南召县| 鄂托克旗| 大理市| 绿春县| 弥勒县| 秦皇岛市| 巫溪县| 二手房| 广丰县| 昭觉县| 阳西县| 丽江市| 榆林市| 阿克苏市| 吐鲁番市| 广南县| 友谊县| 富阳市| 临安市| 深水埗区| 奇台县| 昌宁县| 溧水县| 张掖市| 溆浦县| 宝应县| 来宾市| 天气| 石林| 左云县| 镇康县| 沈丘县| 浦城县| 蒙自县|