博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
深入浅出 Node ( 四 ) HTTP核心模块
阅读量:6395 次
发布时间:2019-06-23

本文共 3076 字,大约阅读时间需要 10 分钟。

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事件处理方法的第二个参数)向客户端发送数据。

转载地址:http://uzgha.baihongyu.com/

你可能感兴趣的文章
企业级性能、安全可靠 阿里云发布企业级大数据平台开发者版
查看>>
Spring Boot使用过程小记(一)--加载自定义的Spring XML
查看>>
Git分支关联远程GitHub分支出错
查看>>
设计模式--桥接模式
查看>>
linux笔记之进程信息查看工具
查看>>
django 自定义分页器
查看>>
Oracle命令
查看>>
转载-没有IE就没有伤害!浏览器兼容性问题解决方案汇总
查看>>
常用 tcpdump 抓包方式
查看>>
Geek's Collection(幂运算)
查看>>
easy bootstrap模板
查看>>
Hdu 4734-F(x) 数位dp
查看>>
DRUID连接池的实用 配置详解
查看>>
html&css精华总结
查看>>
ImportError: No module named tornado.ioloop 记录过程
查看>>
hihocoder [Offer收割]编程练习赛14 小Hi和小Ho的礼物
查看>>
JQuery EasyUI 动态改变表单项的验证守则
查看>>
iOS开发设置View某个角为圆角
查看>>
【python】python path,macports,easy-install,numpy,scipy,ipython,matplotlib,集成工具...
查看>>
学习进度总结
查看>>