2013-02-16 46 views
0

最近我問了很多問題;)
所以我在創建我的網絡聊天方面取得了一些進展。

所以我得到它的工作,
我的問題是,如何輸入的東西到textarea和點擊後輸入信息將被記錄到服務器?
node.js - 我如何獲得請求?

我更新了代碼,所以它的工作原理。

Node.js的文件 -

var http = require('http'); 
var fs = require('fs'); 
var path = require('path'); 

var messages = []; 

// Simple Function to Load all of the HTML/CSS/JavaScript Files. 
function LoadHTML(html, requrl, res) { 
    var filePath = '.' + requrl; 
    if (filePath == './') { 
     filePath = './' + html; 
    } 

    var extname = path.extname(filePath); 
    var contentType = 'text/html'; 
    switch (extname) { 
     case '.js': 
      contentType = 'text/javascript'; 
     break; 
     case '.css': 
      contentType = 'text/css'; 
     break; 
    } 

    fs.exists(filePath, function(exists) { 

     if (exists) { 
      fs.readFile(filePath, function(error, content) { 
       if (error) { 
        res.writeHead(500); 
        res.end(); 
       } 
       else { 
        res.writeHead(200, { 'Content-Type': contentType }); 
        res.end(content, 'utf-8'); 
       } 
      }); 
     } 
     else { 
      res.writeHead(404); 
      res.end(); 
     } 
    }); 
} 

var server = http.createServer(function (req, res) { 

    var url = req.url; 

    LoadHTML('index.html', url, res); 

    if(url.substring(0,16) == "/ser.js?message=") { 
     var message = url.substring(16, url.length); 
     console.log(message); 
    } 

}).listen(8125); 

下面是HTML/CSS/Javascript代碼 - http://jsfiddle.net/Q79PK/1/

編輯:我得到它的工作,我更新的代碼,你可以看看並學習;)
最多的票將是偉大的!

回答

1

您不應該使用http.get(options, callback),因爲它旨在執行不帶數據的HTTP GET。 改爲使用http.request(options, callback),您可以在其中添加數據到請求。看到:在所述請求內貼http://nodejs.org/api/http.html#http_http_request_options_callback

對於服務器側記錄和處理數據,進行netire req對象是loadHTML函數(而不是req.url)的參數。然後你就可以將偵聽器添加到ServerRequest:

req.addListener("data", function(data) { 
    console.log("data : "+data); 
}); 

(並相應更新var filePath = '.' + req;var filePath = '.' + req.url;)。

curl -d "some data" http://localhost:8125 

和服務器端有以下記錄:

data : some data 

以下是完整的

您可以通過使用捲曲命令模擬請求,如果您有它測試此我修改了代碼:

var http = require('http'); 
var fs = require('fs'); 
var path = require('path'); 

var messages = []; 

// Simple Function to Load all of the HTML/CSS/JavaScript Files. 
function LoadHTML(html, req, res) { 
    var filePath = '.' + req.url; 
    if (filePath == './') { 
     filePath = './' + html; 
    } 

    req.addListener("data", function(data) { 
     console.log("data : "+data); 
    }); 

    var extname = path.extname(filePath); 
    var contentType = 'text/html'; 
    switch (extname) { 
     case '.js': 
      contentType = 'text/javascript'; 
     break; 
     case '.css': 
      contentType = 'text/css'; 
     break; 
    } 

    fs.exists(filePath, function(exists) { 

     if (exists) { 
      fs.readFile(filePath, function(error, content) { 
       if (error) { 
        res.writeHead(500); 
        res.end(); 
       } 
       else { 
        res.writeHead(200, { 'Content-Type': contentType }); 
        res.end(content, 'utf-8'); 
       } 
      }); 
     } 
     else { 
      res.writeHead(404); 
      res.end(); 
     } 
    }); 
} 

var server = http.createServer(function (req, res) { 
    LoadHTML('./index.html', req, res); // Calling the Function to load all of the files. 
}).listen(8125); 

HTH

+0

它不工作..當我輸入東西到文本區域,然後點擊輸入它登錄到我的鉻控制檯404(未找到)。 – Israelg99 2013-02-16 22:59:40

+0

您可能也有客戶端問題。嘗試通過鏈接驗證您的鏈接鏈接。對於服務器端,從客戶端不依賴,可以通過如下執行curl命令來管理預期的行爲:curl -d "some data" http://localhost:8125?一旦這個工作,你可以看到發生了什麼客戶端因爲你會確定服務器端是好的。 – Fafhrd 2013-02-17 20:51:57