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文本代碼?
對不起,這是我在這裏編寫代碼的錯字,我正在執行的代碼包含form.html,編輯q – Johnyb
@Johnyb - 重寫了我的答案。 – jfriend00