Node中的http模块

通过Node模块,我们可以实现客户端和服务器端。这篇文章主要研究如何利用http和一些相关模块构建客户端和服务器端代码。读完本文,将能够实现client向server发送数据,而server将数据原样返回。

***********************************************************************************

服务器端

首先介绍几个方法。

  • http的createServer方法

var server = http.createServer(requestListener(request,response)),这个方法做了两件事情:1. 创建服务器;2.定义了收到请求后(请求到来时)服务器如何处理,request指的是客户端发过来的请求(输入流),response指服务器对客户端的响应(输出流)。

通过request, 我们可以得到请求的相关信息。request.method代表请求的方法名(post / get / delete / put...), request.url代表请求的路径名(不包含hostname和port),request.headers返回请求头部对象,而request.httpVersion是请求的http版本号。request.headers里包含这十分丰富的信息,例如:

{ host: ‘localhost:8000‘, //主机名和端口号
  connection: ‘keep-alive‘,
  ‘cache-control‘: ‘max-age=0‘,//缓存相关
  accept: ‘text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8‘, //客户端能够接收的媒体类型(MIME)和优先级,默认为1;表示优先接受text/html、application/                                                                  //xhtml+xml、image/webp类型(q=1),其次为application/xml类型(q=0.9),如果这些都没有,那就随便什么类型了(q=0.8)‘user-agent‘: ‘Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36‘,//客户端类型,表示为chrome桌面板
  ‘accept-encoding‘: ‘gzip, deflate, sdch‘,//客户端支持的内容压缩编码格式
  ‘accept-language‘: ‘en-US,en;q=0.8‘,//客户端使用的语言及其优先级
 }

通过response,可以设置响应部分。response.writeHead(statusCode, statusText, options)方法可以设置响应状态码和描述信息,在options中可以添加自定义头部或者给头部赋值。writeHead和setHeader不同,前者是直接把响应头部发送出去了,而后者只是设置,所以一旦使用了writeHead,接下来想再次修改头部就不可能了,比如在writeHead之后想要通过getHeader("name")或者removeHeader("name")是不可能成功的,因为已经把头发送出去了,如果真的想这么做,就请用setHeader。用法如下:

response.writeHead(200, "quite good", {"name":"test", “content-type":"application/json"});                        response.setHeader("name","test");   response.setHeader("age","16")

writeHead还有一个有用的用法,就是设置重定向。response.writeHead(301, "moved forever", {location: "http://www.baidu.com"}), 如果客户端访问服务器的地址,就会被导航到baidu。

  • server的listen方法

server.listen(port, hostname, queue, callback),port是服务器监听的端口号,hostname为服务器主机名,默认为localhost,queue为队列中等待的连接数上限(默认为511),callback为服务器成功启动(服务器启动时)的回调函数。一般情况下,hostname和queue就采用默认值。

*****************************************************************************************

客户端

客户端要完成的是向服务器发送请求。

时间: 2024-08-25 12:03:11

Node中的http模块的相关文章

Node中require第三方模块的规则

Node.js中使用CommonJs模块化机制,通过npm下载的第三方包,我们在项目中引入第三方包都是:let xx = require('第三方包名'),究竟require方法加载第三方包的原理机制是什么,今天我们来探讨下. require('第三方包名')优先在加载该包的模块的同级目录node_modules中查找第三方包. let template = require('art-template') //加载第三方包 找到该第三方包中的package.json文件,并且找到里面的main属

Node中使用mysql模块遇到的问题

Node的mysql模块,本人的感受就是不好用,各种报错,各种坑,有一个问题困扰了我很久,也不知道是不是我使用的方式不对,不过后来用easymysql模块解决了,我才深信这是一个坑. 问题描述: 假设有这么一个数据表table,它有两个字段index和name,在localhost:3000主页有一个按钮,上面写着“更新”,当我点击更新后会POST到localhost:3000/update,然后后台连接数据库进行更新操作每一条记录的name为“gdt”,更新完毕后回到主页,再重新按一下“更新”

node中的require

1 /*在node中,可以使用require()函数来加载模块. 2 * require函数使用一个参数,参数值可以带有完整路径的模块的文件名,也可以为模块名.当使用node中提供的模块时,在require函数中只需要指定模块名即可. 3 * */ 4 //建立一个页面2.js;代码如下 5 var name="思思博士"; 6 exports.name=name; 7 //建立一个页面1.js;代码如下 8 var two=require("./2.js"); 9

简单剖析Node中的事件监听机制(一)

使用js的class类简单的实现一个事件监听机制,不同于浏览器中的时间绑定与监听,类似于node中的时间监听,并且会在接下来的文章中去根据自己的理解去写一下Event模块中的原理. Node.js使用了一个事件驱动.非阻塞式I/O的模型,使其轻量又高效.并且Node中的大量模块都使用了Event机制,因此可以说是整个Node中最重要的模块之一. 实例: let event = new eventEmitter(); event.on('someType',function(){ }); even

Node中http模块详解(服务端篇)

Node中的Http Node中提供了http模块,其中封装了高效的http服务器和http客户端 http.server是一个基于事件的HTTP服务器,内部是由c++实现的,接口由JavaScript封装 http.request是一个HTTP客户端工具.用户向服务器发送数据. 下面就来分别得介绍一下http的服务端和客户端 一.HTTP服务器 http.Server实现的,它提供了一套封装级别很低的API,仅仅是流控制和简单的解析,所有的高层功能都需要通过它的接口,就像在前面的文章<Node

第二章. node中的模块和require

一 什么是模块.            JavaScript诞生初,它只不过是一个网页的小脚本而已,没有人会想到它会发展到现在能有大量的库,工具,组件变得如此复杂,慢慢地javascript发展中,人们发现javascript有个先天的缺陷--缺少模块.       在其他语言中,java有类,python有import, php 有include和require甚至比它底层的C也有include.而javascript只能通过 <script>标签引入,这种方式令代码变得杂乱,依赖变得不清晰

Node中的包和模块

一.模块和包 概念:模块(Module)和包(Package)是Node.js最重要的支柱.开发一个具有一定规模的程序不可能只用一个文件,通常需要把各个功能拆分.分装.然后组合起来.模块正式为了实现这种方式而诞生,在浏览器JavaScript中,脚本模块的拆分和组合通常使用HTML的script标签来实现,Node.js提供了require函数来调用其他模块,而且模块都是基于文件,机制非常简单,模块和包的区别是透明的,因此经常不作区分. 模块 1.什么是模块 模块和文件是一一对应的.一个Node

Node中的模块系统

加载require var 自定义变量名称 = require('模块') 两个作用: 执行被加载模块的代码 得到被加载模块中的exports导出接口对象 导出exports node中是模块作用域,默认文件中所有成员只在当前文件模块有效 对于希望可以被其他模块访问的成员,我们就把这些成员都挂载到exports接口对象中就可以了. 导出单个成员(拿到的就是:函数,字符串) module.exports = 'hello' 导出多个成员(必须在对象中) module.exports={ add:f

Node中导入模块require和import??

转自:https://blog.csdn.net/wxl1555/article/details/80852326 S6标准发布后,module成为标准,标准的使用是以export指令导出接口,以import引入模块,但是在我们一贯的node模块中,我们采用的是CommonJS规范,使用require引入模块,使用module.exports导出接口. 不把require和import整清楚,会在未来的标准编程中死的很难看. require时代的模块 node编程中最重要的思想之一就是模块,而正