2016-01-30 161 views
0

我正在瞭解節點中的請求。我創建了簡單的服務器請求服務器node.js

var http=require("http"); 
var fs=require("fs"); 
http.createServer(function(req,res){ 


    switch(req.url){ 
     case '/redirect' : 
      res.writeHead({"Location ":'/'}); 
      res.end(); 
      break; 

     case '/form.html' : 
      res.writeHead(200,{'Content-Type': 'text/html'}); 
      req.setEncoding("utf-8"); 
      var ws=fs.createReadStream("form.html") 
      var body=""; 
      ws.pipe(body);  
      res.end(JSON.stringify(body)); 
      break; 

     default: 
     res.writeHead(200,{"Content-Type": 'text/plain'}); 
     res.end(JSON.stringify({ 
      url:req.url, 
      method:req.method, 
      headers:req.headers 
     })); 

    } 

}).listen(4001) 

,並要求腳本

var request=require("request"); 
var inspect = require("util").inspect; 

request('http://localhost:4001/form.html',function(err,res,body){ 
    if(err){ 
     throw err; 
    } 
    console.log(inspect({ 
     err:err, 
     res:{ 
      statusCode:res.statusCode 
     }, 
     body:JSON.parse(body) 
    })) 
}); 

如果我理解正確的話(請求背後的邏輯)= 1)請求腳本使得請求(默認GET)服務器 2 )服務器腳本會通知請求,並確定request.url要做什麼,這裏我們要求/form.html 3)服務器腳本將做/ form/html case =將頭部放入響應中,創建讀取Stream和將該值發送迴應 4)將響應發送到需求est腳本,它在回調函數中由主體參數表示 5)腳本現在在回調函數中執行adction = console.log響應。

form.html包含簡單HTMP形式,但爲什麼請求腳本的輸出是

{ err: null, 
    res: { statusCode: 200 }, 
    body: 
    { url: '/form.html', 
    method: 'GET', 
    headers: { host: 'localhost:4001', connection: 'close' } } } 

,而不是(身體),它包含form.html文本代碼?

回答

0

我不知道我理解你想在你的交換機的form.html分支到底該怎麼做,但如果你只是想報效form.html文件,你可以這樣做:

case '/form.html' : 
     res.writeHead(200,{'Content-Type': 'text/html'}); 
     var ws = fs.createReadStream("form.html"); 
     ws.pipe(res); 
     break; 

這將向瀏覽器提供本地文件form.html的內容。

+0

對不起,這是我在這裏編寫代碼的錯字,我正在執行的代碼包含form.html,編輯q – Johnyb

+0

@Johnyb - 重寫了我的答案。 – jfriend00

相關問題