Node.js的http模块提供有用的功能和类来构建HTTP服务器
HTTP核心模块是Node网络的关键模块。
可以使用
const http = require('http')
该模块提供了一些属性和方法以及一些类。
特性
http.METHODS
此属性列出了所有受支持的HTTP方法:
> require('http').METHODS
[ 'ACL',
'BIND',
'CHECKOUT',
'CONNECT',
'COPY',
'DELETE',
'GET',
'HEAD',
'LINK',
'LOCK',
'M-SEARCH',
'MERGE',
'MKACTIVITY',
'MKCALENDAR',
'MKCOL',
'MOVE',
'NOTIFY',
'OPTIONS',
'PATCH',
'POST',
'PROPFIND',
'PROPPATCH',
'PURGE',
'PUT',
'REBIND',
'REPORT',
'SEARCH',
'SUBSCRIBE',
'TRACE',
'UNBIND',
'UNLINK',
'UNLOCK',
'UNSUBSCRIBE' ]
http.STATUS_CODES
此属性列出了所有HTTP状态代码及其描述:
> require('http').STATUS_CODES
{ '100': 'Continue',
'101': 'Switching Protocols',
'102': 'Processing',
'200': 'OK',
'201': 'Created',
'202': 'Accepted',
'203': 'Non-Authoritative Information',
'204': 'No Content',
'205': 'Reset Content',
'206': 'Partial Content',
'207': 'Multi-Status',
'208': 'Already Reported',
'226': 'IM Used',
'300': 'Multiple Choices',
'301': 'Moved Permanently',
'302': 'Found',
'303': 'See Other',
'304': 'Not Modified',
'305': 'Use Proxy',
'307': 'Temporary Redirect',
'308': 'Permanent Redirect',
'400': 'Bad Request',
'401': 'Unauthorized',
'402': 'Payment Required',
'403': 'Forbidden',
'404': 'Not Found',
'405': 'Method Not Allowed',
'406': 'Not Acceptable',
'407': 'Proxy Authentication Required',
'408': 'Request Timeout',
'409': 'Conflict',
'410': 'Gone',
'411': 'Length Required',
'412': 'Precondition Failed',
'413': 'Payload Too Large',
'414': 'URI Too Long',
'415': 'Unsupported Media Type',
'416': 'Range Not Satisfiable',
'417': 'Expectation Failed',
'418': 'I\'m a teapot',
'421': 'Misdirected Request',
'422': 'Unprocessable Entity',
'423': 'Locked',
'424': 'Failed Dependency',
'425': 'Unordered Collection',
'426': 'Upgrade Required',
'428': 'Precondition Required',
'429': 'Too Many Requests',
'431': 'Request Header Fields Too Large',
'451': 'Unavailable For Legal Reasons',
'500': 'Internal Server Error',
'501': 'Not Implemented',
'502': 'Bad Gateway',
'503': 'Service Unavailable',
'504': 'Gateway Timeout',
'505': 'HTTP Version Not Supported',
'506': 'Variant Also Negotiates',
'507': 'Insufficient Storage',
'508': 'Loop Detected',
'509': 'Bandwidth Limit Exceeded',
'510': 'Not Extended',
'511': 'Network Authentication Required' }
http.globalAgent
指向Agent对象的全局实例,该实例是http.Agent
班级。
它用于管理HTTP客户端的连接持久性和重用,它是Node HTTP网络的关键组成部分。
更多内容http.Agent
稍后对类进行描述。
方法
http.createServer()
返回一个新的实例http.Server
班级。
用法:
const server = http.createServer((req, res) => {
//handle every single request with this callback
})
http.request()
向服务器发出HTTP请求,并创建一个实例http.ClientRequest
班级。
http.get()
如同http.request()
,但会自动将HTTP方法设置为GET并调用req.end()
自动地。
班级
HTTP模块提供5个类:
http.Agent
http.ClientRequest
http.Server
http.ServerResponse
http.IncomingMessage
http.Agent
节点创建一个全局实例http.Agent
类,用于管理HTTP客户端(Node HTTP网络的关键组件)的连接持久性和重用。
该对象确保对服务器的每个请求都排队,并且单个套接字被重用。
它还维护一个套接字池。出于性能原因,这是关键。
http.ClientRequest
一个http.ClientRequest
对象何时创建http.request()
或者http.get()
叫做。
收到回应后,response
通过响应调用事件http.IncomingMessage
实例作为参数。
可以通过两种方式读取响应的返回数据:
- 你可以打电话给
response.read()
方法 - 在里面
response
事件处理程序,您可以为data
事件,因此您可以侦听流进其中的数据。
http.Server
通常使用创建新服务器时实例化并返回该类。http.createServer()
。
拥有服务器对象后,就可以访问其方法:
close()
阻止服务器接受新连接listen()
启动HTTP服务器并监听连接
http.ServerResponse
由创建http.Server
并作为第二个参数传递给request
一旦发生火灾。
众所周知并在代码中用作res
:
const server = http.createServer((req, res) => {
//res is an http.ServerResponse object
})
您将始终在处理程序中调用的方法是end()
,它会关闭响应,消息已完成,服务器可以将其发送给客户端。必须在每个响应上调用它。
这些方法用于与HTTP标头进行交互:
getHeaderNames()
获取已设置的HTTP标头的名称列表getHeaders()
获取已设置的HTTP标头的副本setHeader('headername', value)
设置HTTP标头值getHeader('headername')
获取已设置的HTTP标头removeHeader('headername')
删除已经设置的HTTP标头hasHeader('headername')
如果响应中设置了该标头,则返回trueheadersSent()
如果标头已经发送到客户端,则返回true
处理标头后,您可以通过调用将其发送给客户端response.writeHead()
,它接受statusCode作为第一个参数,可选的状态消息和标头对象。
要将数据发送到响应正文中的客户端,请使用write()
。它将缓冲的数据发送到HTTP响应流。
如果尚未发送标题,请使用response.writeHead()
,它将首先发送标头,以及请求中设置的状态代码和消息,您可以通过设置statusCode
和statusMessage
属性值:
response.statusCode = 500
response.statusMessage = 'Internal Server Error'
http.IncomingMessage
一个http.IncomingMessage
对象是由以下人员创建的:
http.Server
当听request
事件http.ClientRequest
当听response
事件
它可以用来访问响应:
- 使用其状态
statusCode
和statusMessage
方法 - 标头使用其
headers
方法或rawHeaders
- HTTP方法使用
method
方法 - HTTP版本使用
httpVersion
方法 - 使用网址
url
方法 - 底层套接字使用
socket
方法
使用流访问数据,因为http.IncomingMessage
实现Readable Stream接口。
免费下载我的Node.js手册
更多节点教程:
- npm软件包管理器简介
- Node.js简介
- 使用Axios的HTTP请求
- 在哪里托管Node.js应用
- 使用Node.js与Google Analytics(分析)API进行交互
- npx节点包运行器
- package.json指南
- npm在哪里安装软件包?
- 如何更新Node.js
- 如何使用或执行使用npm安装的软件包
- package-lock.json文件
- 使用npm的语义版本控制
- 您是否应该将node_modules文件夹提交到Git?
- 将所有Node依赖项更新到最新版本
- 使用Node.js解析JSON
- 查找npm软件包的安装版本
- Node.js流
- 安装较旧版本的npm软件包
- 在Node中获取当前文件夹
- 如何在Node中记录对象
- 使用导出从Node文件公开功能
- 节点和浏览器之间的区别
- 使用Node发出HTTP POST请求
- 使用Node获取HTTP请求主体数据
- 节点缓冲区
- Node.js的简要历史
- 如何安装Node.js
- 使用Node您需要知道多少JavaScript?
- 如何使用Node.js REPL
- 节点,从命令行接受参数
- 使用Node输出到命令行
- 接受来自Node中命令行的输入
- 使用`npm uninstall`来卸载npm软件包。
- npm全局或本地软件包
- npm依赖项和devDependencies
- Node.js事件循环
- 了解process.nextTick()
- 了解setImmediate()
- 节点事件发射器
- 建立一个HTTP服务器
- 使用Node发出HTTP请求
- Node fs模块
- 使用Axios的Node中的HTTP请求
- 使用Node读取文件
- 节点文件路径
- 用Node写入文件
- 节点文件统计
- 在Node中使用文件描述符
- 在Node中使用文件夹
- 节点路径模块
- Node http模块
- 将WebSockets与Node.js结合使用
- 使用MySQL和Node的基础知识
- Node.js中的错误处理
- 哈巴狗指南
- 如何从Node.js读取环境变量
- 如何从Node.js程序退出
- Node os模块
- 节点事件模块
- 节点,开发与生产之间的区别
- 如何检查Node.js中是否存在文件
- 如何在Node.js中创建一个空文件
- 如何使用Node.js删除文件
- 如何使用Node.js获取文件的最后更新日期
- 如何在JavaScript中确定日期是否为今天
- 如何将JSON对象写入Node.js中的文件
- 为什么要在下一个项目中使用Node.js?
- 从任何文件夹运行Web服务器
- 如何将MongoDB与Node.js结合使用
- 使用Chrome DevTools调试Node.js应用
- 什么是pnpm?
- Node.js运行时v8选项列表
- 使用npm时如何解决“缺少写访问权限”错误
- 如何在Node.js中启用ES模块
- 如何使用Node.js生成子进程
- 如何在Express中同时获取已解析的正文和原始正文
- 如何在Node.js中处理文件上传
- 节点模块中的对等依赖性是什么?
- 如何使用Node.js编写CSV文件
- 如何使用Node.js读取CSV文件
- 节点核心模块
- 使用Node.js一次增加多个文件夹的数量
- 如何将画布打印到数据URL
- 如何使用Node.js和Canvas创建和保存图像
- 如何使用Node.js下载图像
- 如何在Node.js中批量重命名文件
- 如何获取Node中文件夹中所有文件的名称
- 如何使用Promise和基于Node.js回调的等待功能
- 如何在本地测试NPM软件包
- 如何在运行时检查当前的Node.js版本
- 如何使用Sequelize与PostgreSQL交互
- 使用Node.js服务HTML页面
- 如何解决Node.js中的util.pump不是函数错误