2013-03-07 68 views
0

這裏是東西:節點JS Express和簡單的socket服務器

我想創建一個簡單的API服務器,從用戶請求被解析並翻譯到發送到socket服務器簡單的套接字消息。

下面是代碼

的Express服務器:

var express = require('express'); 

var app = express(), 
    handler = require('./lib/urlparser.js'); 

app.get('/', function(req, res){ 
    var body = 'Hello World'; 
    res.setHeader('Content-Type', 'text/plain'); 
    res.setHeader('Content-Length', body.length); 
    res.end(body); 
}); 

app.get('/:command/:mode/:addr/:value', handler.handleRequest); 

app.listen(80); 
console.log('Listening on port 80...'); 

而且這個handleRequest模塊

exports.handleRequest = function(req, res) { 

    var net = require('net'); 
    var HOST = '192.168.1.254'; 
    var PORT = 8888; 
    var client = new net.Socket(); 

    /* translate the url params and save it to var request and send it */ 
    /* The code goes here */ 

     client.connect(PORT, HOST, function() { 
      //console.log('Connected To: ' + HOST + ':' + PORT); 
      client.setEncoding('utf-8'); 
      client.write(request); 
      //console.log('Message Sent'); 
     }); 

     client.on('data', function(val) { 
      //console.log('The Data: ' + val); 
      res.send([{addr:'test'}, {value: val}]); 
      client.destroy(); 
     }); 

     client.on('close', function() { 
      //console.log('Connection closed'); 
     }); 

    }; 

此代碼的工作,我只需要知道是正確的或者是還有什麼方式來包含網絡模塊,並在主js文件中聲明套接字服務器的ip和端口(在模塊外部)?

任何幫助,將不勝感激。

回答

0

你完全可以將代碼從模塊移動到主文件。

首先,在主文件中,創建一個名爲handleRequest的函數,該函數採用相同的變量並且與handleRequest模塊中的函數具有相同的主體。也就是說,

var handleRequest = function(req,res){ 
    var net = require('net') 
    ... 
    ... 
} 

其次,改變這一行:

app.get('/:command/:mode/:addr/:value', handler.handleRequest); 

到這一點:

app.get('/:command/:mode/:addr/:value', handleRequest); 

現在你不再需要包含模塊。 祝你好運!