Node.js无法通过网络建立连接

问题描述:

我遇到了Node.js的问题。我编写了一个非常简单的TCP服务器,它接收JSON并在MySQL数据库上执行简单的数据库操作。一切都在本地正常工作。我使用nc <server ip address> <port>与netcat进行测试。Node.js无法通过网络建立连接

当我在本地执行操作时,我可以访问服务器,但是当我尝试通过网络执行操作时,它无法连接。 Netcat正在通过困扰我的网络正常工作。我也尝试了HTTP服务器的例子,我也无法让它工作。我正在使用Mac OS X Snow Leoppard和Arch Linux。我无法从/连接其中任何一个。有任何想法吗?我需要做一些特殊的事情来让Node.js连接吗?

如果有人有任何想法,我会非常高兴=)我不粘贴源代码,因为它的长度为121行,但如果有人需要它,我会交给他。

+0

你有没有正确地配置你的路由器?说港口已经开放了吗? – 2012-01-31 01:21:01

+0

是的,实际上我用netcat测试了这个端口,它连接了,但我开始怀疑。如果netcat连接,那么端口将会打开,对吧? – Heldraug 2012-01-31 01:23:26

+0

你有没有尝试过你的端口? – 2012-01-31 01:25:23

解决方案从OP的问题


我搞砸了很大的时间提取。就像在示例中一样,我使用server.listen(port, '127.0.0.1'),这意味着只有本地主机才能访问该服务。

这里是我的源代码:

//+-----------------------------------------+ 
//| TCP Server     | 
//| Description: MySQL connector.  | 
//| Speaks JSON over TCP   | 
//+-----------------------------------------+ 
//| Author: /usr/share    | 
//+-----------------------------------------+ 
//| Dependencies: Node.js, MySQL,  | 
//| MySQL for Node.js    | 
//+-----------------------------------------+ 

/******************************************** 
* Standard functions    * 
********************************************/ 

/* 
* Deletes trailing spaces 
*/ 
function trim(str) { 
    return str.replace(/^\s*/, "").replace(/\s*$/, ""); 
} 

/* 
* Writes the log with the operations executed in order 
*/ 
function writeLog(str) { 
    var fs = require('fs'); 
    var log = fs.createWriteStream('log.txt', {'flags': 'a'}); 
    log.write(str); 
} 

/* 
* Executes DML instructions on the MySQL DB 
* op parameters: 
* [0] Select 
* [1] Insert 
* [2] Update 
* [3] Delete 
*/ 
function queryDB(request, socket) { 
    var Client = require('mysql').Client; 
    var client = new Client(); 
    client.user = 'root'; 
    client.password = ''; 
    client.host='127.0.0.1'; 
    client.port='3306'; 
    client.database='usrshare'; 

    var op = request['op']; 
    var query; 

    // Parse a query from its corresponding op 
    if(op == 0) { 
    query = 'SELECT * FROM DATA'; 
    } else if(op == 1) { 
    query = "INSERT INTO `usrshare`.`data` (`str`) VALUES ('" + request['data'] + "');"; 
    } else if(op == 2) { 
    query = "DELETE FROM `usrshare`.`data` WHERE `id` = " + request['id']; 
    } else if(op == 3) { 
    query = "UPDATE `usrshare`.`data` SET `str` = '" + request['data'] + "' where `id` = " + request['id']; 
    }else { 
    console.log("This shouldn't be happening"); 
    return null; 
    } 

    // Query the current database 
    client.query(
    query, 
    function selectData(err, results, fields) { 
     if (err) { 
     console.log("Error: " + err.message + "\n"); 
     socket.write("Error: " + err.message + "\n"); 
     writeLog("Error: " + err.message + "\n"); 
     return null; 
     } 
     client.end(); 

     if(op == 0) { 
     socket.write(JSON.stringify(results) + "\n"); 
     writeLog("op:" + op + "\n"); 
     } else if(op == 1) { 
     socket.write("Row inserted\n"); 
     writeLog("op:" + op + " data: " + request['data'] + "\n"); 
     } else if(op == 2) { 
     socket.write("Row deleted\n"); 
     writeLog("op:" + op + " id: " + request['id'] + "\n"); 
     } else if(op == 3) { 
     writeLog("op:" + op + " id: " + request['id'] + " data: " + request['data'] + "\n"); 
     socket.write("Row updated\n"); 
     } 

     return results; 
    }); 
} 

//------------------------------------------- 
//------------------------------------------- 

/******************************************** 
* Entry point     * 
********************************************/ 
if(process.argv.length != 3) { 
    console.log('Error, use: ' + process.argv[0] + ' ' + process.argv[1] + ' <port>'); 
    process.exit(1); 
} 

var port = process.argv[2]; 
var net = require('net'); 

// Actual server 
var server = net.createServer(function (socket) { 
    socket.setEncoding('utf8'); 
    socket.on('data', function(data) { 
    request = JSON.parse(data); 
    queryDB(request, socket); 
    }); 
}); 

// Listening on localhost 
server.listen(port, '127.0.0.1'); 
console.log('Listening on port ' + port);