這篇文章主要介紹了關於深入理解Node的HTTP核心模組,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
#創建一個伺服器
var http = require('http'); var fs = require('fs'); var url = require('url'); var serverHandle = function(req, res) { var pathname = url.parse(req.url).pathname; // 对请求的url进行分析,取得pathname console.log(url.parse(req.url)); console.log(url.parse(req.url).pathname); // 消除favicon.ico影响 if (req.url !== "/favicon.ico") console.log(req.url); //消除/favicon.ico的影响 console.log(pathname); // 读取文件 fs.readFile(pathname.substr(1), function(err, data) { if (err) { console.log(err); res.writeHead(404, {"Content-Type": "text/html"}); } else { res.writeHead(200, {"Content-Type": "text/html"}); res.end(data.toString()); } }) }; var server = http.createServer(serverHandle); server.listen(3000); console.log('http is running at 127.0.0.1:3000');
監聽連接和請求
var http = require('http'); var server = http.createServer(); // 返回一个http.server实例 // 【一】 // 监听request事件,每接受到一个请求的时候触发 // 当服务端接收到客户端请求时,触发request事件,所以可以使用监听request事件的方式来代替createServer中的回调函数: server.on('request', function(req,res) { //接收到客户端请求的连接后代码部分 }) // 【二】 // 【监听客户端的链接】 // server.listen(port,[host],[backlog],[callback]); server.listen(3000,127.0.0.1); /* port: 监听的端口号,0表示为服务器随机分配一个端口号。 host: 监听的地址,默认为本机(localhost) backlog: 指定位于[等待队列中]的客户端连接的[最大数量]。超过此数量,则服务器拒绝新的客户端请求。 callback: 开启监听后触发的回调函数。当服务器开启监听后会触发listening事件,可以通过监听listening事件来代替callback回调函数。 */ server.on('listening', function(){ console.log('我监听连接,并且执行此回调函数!!'); })
connection 和request的區別
// 默认情况下,客户端与服务端每进行依次HTTP交互就进行一次连接,在HTTP1.1之后添加了长连接, // 如果在客户端发送请求头信息中或服务器发送的响应头信息中包含“Connection: keep-live”信息,则HTTP连接将继续保持。 // 当客户端与服务器建立连接时,会触发服务器对象的connection事件,可以通过监听connection事件来处理连接后的事情,此时回调参数为socket对象。 server.on('connection', function(socket) { console.log(socket); }) ** connection 和 request的区别 客户端与服务端每次建立连接的时候会触发connection事件, 当服务端接受到客户端请求的时候,就会触发request事件。发送请求是建立在双方已经成功连接的接触之上
透過請求取得客戶端資訊
當客戶端與伺服器連接後,伺服器可以透過 http.IncommingMessage
實例化的物件(createServer方法中回呼函數的第一個參數)的一些屬性和方法來取得客戶端的請求資訊和讀取客戶端請求的資料。
* method: 客户端请求方式 * url: 请求的地址 * headers: 客户端发送的请求头信息 * httpVersion: HTTP请求版本 * trailers: 客户端发送的trailers对象信息。只有IncommingMessage对象的end事件触发后才能读取到该信息。 * socket: 服务器端监听客户端请求的socket对象。 * data事件: 当服务器接收到客户端发送的请求数据时触发data事件。 * end事件: 当客户端发送给服务器数据执行完毕时触发end事件。
var http = require('http'); var serverHandle = function(req,res) { console.log(req); req.on("data",function(data){ console.log("接收到的数据:"+decondeURIComponent(data)); }); req.on("end",function(){ console.log("数据接收完毕"); }); } var server = http.createServer(serverHandle); server.listen(3000); server.on('listening', function() { console.log('服务器启动中~~~'); })
// 一个简单的get请求,获取信息 var http = require('http'); var url = require('url'); var util = require('util'); var serverHandle = function(req,res) { var parse = url.parse(req.url,true).query; res.write('name'+ parse.name); res.write('url'+ parse.url); res.end(); } var server = http.createServer(serverHandle); server.listen(3000); server.on('listening', function() { console.log('服务器启动中~~~'); }) // http://localhost:3000/?url=123&name=321
回應客戶端資訊
利用http.ServerResponse
物件(createServer
方法或request
事件處理方法的第二個參數)向客戶端發送資料。
以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!
相關推薦:
以上是深入理解Node的HTTP核心模組的詳細內容。更多資訊請關注PHP中文網其他相關文章!