2012-01-31 93 views
2

我遇到了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

回答

0

解決方案從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); 
相關問題