node.js入门 - 9.api:http
node一个重要任务是用来创建web服务,接下来我们就学习与此相关的一个重要的api -- http。我们使用http.createServer()创建一个http服务的实例,用来处理来自客户的请求。http模块包含一些重要的内容,下面我们就来学习。
http服务器
我们先来看一个简单的例子,如何创建一个简单的服务器。
require('http').createServer(function(req,res){ res.writeHead(200, {});res.end('hello world');}).listen(8125);
上面的代码比较简单,使用require('http')创建了一个http的实例,然后使用createServer方法创建了一个服务器,使用listen监听8125端口。上面的代码使用了链式的编码风格,虽然简单但是可读性差,变量复用性也不好,所以我们建议使用下面的编码风格。
var http = require('http'); var server = http.createServer(); var handleReq = function(req,res){res.writeHead(200, {});res.end('hello world'); }; server.on('request', handleReq); server.listen(8125);
现在的代码就明了多了,通过 var server = http.createServer() 创建了服务器,并把它保存在变量server中,接下来使用server.on('request', handleReq)绑定request事件。对request事件的绑定,例1链式风格的编码并没能直接体现出来。
http提供了很多其他的事件,下面我们简单介绍。
1.connection和close:分别代表建立和关闭与客户端的tcp连接。
2.checkContinue:当客户端向服务器端发送大量数据的时候,他将检查是否可以继续,此时触发事件。当触发了checkContinue事件时,request事件不再触发。
3.upgrade:当客户端请求升级协议的时候触发,如果该事件没有相应的处理,服务器将拒绝升级。
4.clientError:客户端发生异常时触发。
http客户端
有时候你需要使用到向外连接的http请求,例如使用web服务,访问文本数据源或者抓取web站点信息,这时你可以使用http.ClientRequest创建http请求。先看一个例子:
var http = require('http'); var opts = {host: 'www.google.com'port: 80,path: '/',method: 'GET' }; var req = http.request(opts, function(res) {console.log(res);res.on('data', function(data) {console.log(data);}); }); req.end();
我们创建了一个http请求,为响应添加了data事件,最后使用req.end()初始化和发送我们的请求。
创建http GET 请求
var http = require('http'); var opts = {host: 'www.google.com'port: 80,path: '/', }; var req = http.get(opts, function(res) {console.log(res);res.on('data', function(data) {console.log(data);}); });
这个例子和之前的例子实现同样的功能,区别就在于opts对象少了method属性,使用http.get()代替了之前的var req=http.request()和req.end()。由于返回回来的数据是2进制数据,我们需要使用response.setEncoding()实现编码,所以我们需要对代码做点小修改。
var http = require('http'); var opts = {host: 'www.google.com'port: 80,path: '/', }; var req = http.get(opts, function(res) {console.log(res); res.setEncoding('utf8');res.on('data', function(data) {console.log(data);}); });
使用http POST和PUT发送数据
var options = {host: 'www.example.com',port: 80,path: '/submit',method: 'POST' }; var req = http.request(options, function(res) {res.setEncoding('utf8');res.on('data', function (chunk) {console.log('BODY: ' + chunk);}); }); req.write("my data"); req.write("more of my data"); req.end();
上面的例子我们使用了req.write()方法,向服务器说明我们要发送的数据,最后使用req.end()初始化并发送请求。代码中的res是ClientResponse对象,他有两个重要的属性:statusCode(状态码)和header(响应头)。
URL
url模块提供了一些方法,让我们解析和处理url字符串变得更加简单,这些方法包括:parse, format和resolve。我们来看例子,逐行在node REPL中执行下面的命令(之前的课程讲到了如何使用,node.js入门 - 8.api:events)。
var URL = require('url'); var myUrl = "http://www.nodejs.org/some/url/?with=query¶m=that&are=awesome#alsoahash"; myUrl parsedUrl = URL.parse(myUrl); parsedUrl = URL.parse(myUrl, true);
执行结果:
querystring
querystring模块式用来处理querystring字符串的,他包括如下方法:parse, decode, escape, unescape, unescapeBuffer, encode和stringify。我们来看一个例子。
var qs = require('querystring'); qs.parse('a=1&b=2&c=d');
执行结果:
再来一例,关于encode方法。
var qs = require('querystring'); var myObj = {'a':1, 'b':5, 'c':'cats', 'func': function(){console.log('dogs')}} qs.encode(myObj);
执行结果:
node.js入门 - 9.api:http相关推荐
- node.js入门 - 12.api:进程(process)
虽然node对操作系统做了很多抽象的工作,但是你还是可以直接和他交互,比如和系统中已经存在的进程进行交互,创建工作子进程.node是一个用于事件循环的线程,但是你可以在这个事件循环之外创建其他的进程( ...
- 《Node.js入门》Windows 7下Node.js Web开发环境搭建笔记
最近想尝试一下在IBM Bluemix上使用Node.js创建Web应用程序,所以需要在本地搭建Node.js Web的开发测试环境. 这里讲的是Windows下的搭建方法,使用CentOS 的小伙伴 ...
- js读取http chunk流_极简 Node.js入门 教程双工流
点击上方蓝字关注我们 小编提示: 本文是由 ICBU 的谦行小哥哥出品,我们会持续发出极简 Node.js入门 教程,敬请期待哦,文中有比较多的演示代码建议横屏阅读 双工流就是同时实现了 Readab ...
- Node.js 入门教程 23 使用 npm 的语义版本控制 24 卸载 npm 软件包 25 npm 全局或本地的软件包
Node.js 入门教程 Node.js官方入门教程 Node.js中文网 本文仅用于学习记录,不存在任何商业用途,如侵删 文章目录 Node.js 入门教程 23 使用 npm 的语义版本控制 24 ...
- Node.js 入门手册:那些最流行的 Web 开发框架
这篇文章与大家分享最流行的 Node.js Web 开发框架.Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用程序,编 ...
- Node.js 入门教程 6 V8 JavaScript 引擎
Node.js 入门教程 Node.js官方入门教程 Node.js中文网 本文仅用于学习记录,不存在任何商业用途,如侵删 文章目录 Node.js 入门教程 6 V8 JavaScript 引擎 6 ...
- Node.js 入门详解(一)
目录 前言 1. 初识 Node.js 1.1 回顾与思考 1.2 Node.js 简介 1.2.1 什么是Node.js 1.2.2 Node.js 中的 JavaScript 运行环境 1.2.3 ...
- Node.js 入门知识点总结
Noed.js 快速入门 前言 node.js 入门 环境配置 hello node.js node.js 获取参数 node.js 模块系统 node.js 路由 node.js 文件操作 使用 n ...
- node.js入门 - 7.异常处理与多进程开发
node.js入门 - 7.异常处理与多进程开发 参考文章: (1)node.js入门 - 7.异常处理与多进程开发 (2)https://www.cnblogs.com/softlover/arch ...
最新文章
- 用于在公网环境下测试的Telnet/SSH服务器
- 从tcp到netty(一)
- BZOJ 3203 Sdoi2013 保护出题人 凸包+三分
- python 详解re模块
- 09月23日 pytorch与resnet(一)
- 清除1188.com
- 深刻理解Binder机制
- iis 缓存 静态文件_强制更新IIS中的缓存JavaScript文件
- 史上最全的中药口诀大全
- 增加虚拟android内存,SD卡变RAM 增加虚拟内存方法
- 活动单导学计算机课,教学中“活动单导学”教学模式的反思
- python爬取网易云评论最多的歌_python爬取网易云音乐评论
- 如何将html模板资源转为vuecli项目
- 网管日记:故障网络交换机快速替换方法
- 【翻译】Real Shading in Unreal Engine 4
- 全网分析HTTP协议最全的一篇文章,程序员赶紧收藏
- 文本超出显示省略号的方法
- seo关键字优化条例
- SkyWalking 详细安装
- 8051/2单片机基础 实现开关,驱动2位的共阳极数码管显示小数,驱动喇叭播放音乐
热门文章
- hdu1828 线段树扫描线求矩形面积的周长
- 【Groovy】xml 序列化 ( 使用 MarkupBuilder 生成 xml 数据 | 设置 xml 标签内容 | 设置 xml 标签属性 )
- 【C 语言】文件操作 ( 配置文件读写 | 写出或更新配置文件 | 追加键值对数据 | 更新键值对数据 )
- 【字符串】最长回文子串 ( 动态规划算法 ) ★
- 【Flutter】Animation 动画 ( Flutter 动画类型 | Flutter 动画的核心类 )
- 【计算理论】计算复杂性 ( 无向图独立集问题 | 独立集问题是 NP 完全问题证明思路 | 证明独立集问题是 NP 完全问题 )
- 【C++ 语言】面向对象 ( 函数重载 | 运算符重载 | 运算符重载两种定义方式 | 拷贝构造方法 | RVO 优化 | NRVO 优化 )
- mysql:视图,触发器,事务,存储过程,函数
- HTML5全局属性和事件
- NuGet的本地服务器安装与Package的发布(呕吐)