2015-05-15 16 views
6

Tôi sử dụng phía máy chủ Node.js. Tôi đã thử mã của tôi trên localhost và mọi thứ hoạt động tốt. Tôi đã mua một máy chủ và cài đặt Apache và node.js vào nó và kiểm tra ứng dụng web của tôi ở đó. Tôi đã thay đổi chính xác cấu hình kết nối MySQL từ máy chủ cục bộ sang cấu hình máy chủ.Node.js MySQL - Lỗi: kết nối ECONNREFUSED

tôi thử nghiệm ứng dụng web của tôi với cấu hình này:

var mysql  = require('mysql'); 
var mysqlConnection; 
function new_mysqlConnection() { 
    mysqlConnection = mysql.createConnection({ 
     host  : 'myurl.at', 
     user  : 'myusername', 
     database : 'mydatabase', 
     password : 'mypassword' 
    }); 
} 

tôi khởi động server Node.js với:

$ node server.js 

Khi tôi tải trang, nó được hiển thị một cách chính xác, nhưng khi Node. js cố gắng kết nối với cơ sở dữ liệu Tôi luôn gặp lỗi sau:

Error: connect ECONNREFUSED 
    at errnoException (net.js:905:11) 
    at Object.afterConnect [as oncomplete] (net.js:896:19) 
    -------------------- 
    at Protocol._enqueue (/var/www/node_modules/mysql/lib/protocol/Protocol.js:135:48) 
    at Protocol.handshake (/var/www/node_modules/mysql/lib/protocol/Protocol.js:52:41) 
    at Connection.connect (/var/www/node_modules/mysql/lib/Connection.js:119:18) 
    at reconnectDb (/var/www/server.js:319:18) 
    at app.get.email (/var/www/server.js:109:2) 
    at Layer.handle [as handle_request] (/var/www/node_modules/express/lib/router/layer.js:82:5) 
    at trim_prefix (/var/www/node_modules/express/lib/router/index.js:302:13) 
    at /var/www/node_modules/express/lib/router/index.js:270:7 
    at Function.proto.process_params (/var/www/node_modules/express/lib/router/index.js:321:12) 
    at next (/var/www/node_modules/express/lib/router/index.js:261:10) 
+1

Hoặc máy chủ của bạn không đúng hoặc bạn cần chỉ định số cổng. Cổng mysqld của bạn đang chạy trên cổng nào? Sau khi điều này đã được sắp xếp, một khả năng khác là các cổng trên máy chủ của bạn bị chặn. Bạn đang kết nối với loại mạng nào? Thông thường chúng tôi kết nối thông qua localhost, hoặc một mạng nội bộ, và không phải internet. – beiller

+0

@beiller Trước tiên, tôi xin cảm ơn vì câu trả lời nhanh của bạn. Tôi đã thử nó với thiết lập cổng trong cấu hình, nhưng nó cũng không hoạt động. Mysql chạy trên cổng này: 'tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 4322/mysqld' Server.js của tôi đang chạy trên cổng 2000, cả hai đều chạy trên cùng một cổng? Bạn có ý nghĩa gì với "loại mạng mà bạn đang kết nối thông qua?" Tăng bạn! – Nico

+0

Không, chúng không chạy trên cùng một cổng. Thông báo lỗi của bạn về cơ bản có nghĩa là "kết nối của bạn đã bị từ chối bởi hệ điều hành" IE bạn không bao giờ có gần chạm vào máy chủ mysql. Bằng cách yêu cầu những gì mạng, tôi yêu cầu, là mysql và nút của bạn.ứng dụng js đang chạy trên cùng một máy chủ vật lý? – beiller

Trả lời

13

Bạn cần thêm giá trị của socket path đến đối tượng cấu hình:

socketPath: '/var/run/mysqld/mysqld.sock' 

Trong MAMP, bạn đi đến http://localhost:8888/MAMP, và bạn thấy:

/Applications/MAMP/tmp/mysql/mysql.sock 

Cuối cùng bạn có:

var connection = mysql.createConnection({ 
    host  : config.host, 
    user  : config.user, 
    password : config.pass, 
    database : config.db, 
    socketPath: '/Applications/MAMP/tmp/mysql/mysql.sock' 
}); 
4

Kiểm tra cho MySQL của bạn cổng trong máy chủ của bạn.

Trong MAMP, theo mặc định, nó sử dụng 8889.

Thêm vào cấu hình kết nối của bạn.

Cấu hình MySQL của bạn sẽ trông như thế này.

this.pool = mysql.createPool({ 
    connectionLimit: 10, 
    host: 'localhost', 
    user: 'root', 
    password: 'root', 
    database: 'todo', 
    port: '8889' 
}); 
0

Tôi cũng có cùng một vấn đề trong google đám mây với nginx

thay đổi

host: 'localhost' 

để

host : 'cloud_instance_private_ip'

có thể giúp một số một với cùng một vấn đề

Các vấn đề liên quan