首页 > 编程语言 >Node.js 的 http模块

Node.js 的 http模块

时间:2024-08-20 11:08:46浏览次数:10  
标签:Node http 请求 request js 服务器 server response

http模块

http 模块是一个内置模块,它提供了 HTTP 服务器的功能。使用这个模块,你可以创建一个 HTTP 服务器来响应客户端的请求,http 模块是 Node.js 中进行 HTTP 通信的基础,无论是作为服务器还是客户端。

常用的服务器软件还有:Apache,IIS,Nginx,Tomcat

http 模块的一些基本用法

  1. 创建服务器 (http.createServer):
    • http.createServer((request, response)):创建一个新的 HTTP 服务器,其中 request 是一个包含请求信息的对象,response 是一个可以用于发送响应的对象。
  2. 监听请求
    • 服务器对象有一个 listen 方法,用于指定服务器监听的端口和(可选的)主机名。
  3. 发送响应
    • 使用 response 对象的 writeHead 方法设置响应状态码和响应头。
    • 使用 response 对象的 end 方法发送响应体并结束响应。
  4. 处理客户端请求
    • 你可以访问 request 对象来获取请求方法、URL、HTTP 版本、请求头等信息。
    • 可以通过 request 对象的 on 方法监听数据事件,以接收请求体。
  5. 关闭服务器
    • 使用 server.close 方法关闭服务器,停止监听端口。
  6. 发送文件作为响应
    • 可以使用 fs 模块读取文件内容,并通过 response 对象发送。
  7. 错误处理
    • 可以监听 server 对象的 error 事件来处理错误。

创建 web 服务器的基本步骤

  1. 导入 http 模块
  2. 创建 web 服务器实例
  3. server.on() 为服务器实例绑定 request事件,监听客户端的请求
  4. 启动服务器

下面是一个简单实例:

const http = require('http')
// 创建 web 服务器实例
const server = http.createServer()

server.on('request', (request, response) => {
    // 获取发送请求的url
    const url = request.url
    console.log(`Request request: ${url}`)
    // 获取发送请求的类型
    const method = request.method || 'GET'
    // 设置响应头
    response.writeHead(200, {
        'Content-Type': 'text/plain; charset=utf-8'
    });
    // 发送响应数据
    response.end("hello world!", 'utf-8')
})

server.listen(8081, '127.0.0.1', function () {
        console.log('server running in 127.0.0.1:8081')
    }
)

服务器端方法

  1. http.createServer()
    • 创建一个新的 HTTP 服务器实例。
  2. server.listen(port, [hostname], [backlog], [callback])
    • 使服务器监听指定的端口和主机名。
  3. server.close([callback])
    • 关闭服务器,停止监听。
  4. server.emit('request', request, response)
    • 当客户端发送请求时,触发 'request' 事件。
  5. server.emit('upgrade', request, socket, head)
    • 当客户端请求升级连接到一个 Websocket 时,触发 'upgrade' 事件。
  6. server.emit('connect', request, socket)
    • 当客户端请求一个 HTTP CONNECT 方法时,触发 'connect' 事件。
  7. server.maxHeadersCount
    • 设置可以接收的请求头的最大数量。
  8. server.setTimeout(msecs, callback)
    • 设置响应超时时间。
  9. server.keepAliveTimeout
    • 设置长连接的超时时间。

请求和响应对象方法

  1. response.writeHead(statusCode,[ statusMessage],[ headers])
    • 发送响应头。
  2. response.write(chunk, [encoding])
    • 发送响应体的一部分。
    • encoding 默认值为 utf-8
  3. response.end([data],[enconding])
    • 结束响应过程。
  4. response.setTimeout(msecs, callback)
    • 设置请求的超时时间。
  5. response.getHeader(name)
    • 获取响应头。
  6. response.setHeader(name, value)
    • 设置响应头。
  7. response.hasHeader(name)
    • 检查是否设置了特定的响应头。
  8. response.removeHeader(name)
    • 移除特定的响应头。

客户端请求方法

  1. http.request(options, callback)
    • 发起一个请求到服务器。
  2. http.get(options, callback)
    • 发送一个 GET 请求。

请求选项(options)属性:

  • hostnamehost:请求的服务器域名或 IP 地址。
  • port:服务器端口。
  • path:请求的路径。
  • method:请求方法(如 GET 或 POST)。
  • headers:请求头对象。
  • auth:HTTP 基本认证(用户名和密码)。
  • 等等...

请求对象方法

  1. request.write(chunk,[encoding])
    • 向请求体写入数据。
  2. request.end([data],[enconding])
    • 结束请求。
  3. request.abort()
    • 中止请求。
  4. request.setTimeout(timeout, [callback])
    • 设置请求超时。
  5. request.on('response', callback)
    • 当接收到响应时触发。

事件

  • request:服务器接收到请求时触发。
  • upgrade:客户端请求升级连接时触发。
  • connect:客户端请求 HTTP CONNECT 方法时触发。
  • checkContinue:客户端发送了 HTTP 'Expect: 100-continue' 头时触发。
  • error:请求或响应过程中发生错误时触发。
  • timeout:请求超时时触发。

标签:Node,http,请求,request,js,服务器,server,response
From: https://www.cnblogs.com/xxaxf/p/18369038

相关文章

  • 原生JS实现虚拟列表
    什么是虚拟列表如果我们要将一个数组渲染为列表添加到页面中,我们可以很容易实现,无非就是循环遍历这个数组,然后依次创建DOM元素插入即可,但是如果数据量很庞大,比如有一万条数据,我们就要把一万个DOM结点插入到页面中,这显然会导致页面的卡顿。为了针对这个场景进行优化,让页面和我......
  • 解决nvm ls-remote 列表只出现iojs版本
    前言在nvm安装node时发现显示不存在此版本,使用nvmls-remote查看可安装列表时发现,列表中只有iojs$nvmls-remoteiojs-v1.0.0iojs-v1.0.1iojs-v1.0.2iojs-v1.0.3iojs-v1.0.4iojs-v1.1.0iojs-v1.2.0iojs-v1.3.0iojs-v1.4.1......
  • postgresql 定时收集表和索引统计信息 转发:https://blog.csdn.net/weixin_33711641/a
    --由于pg中表和索引的信息收集都是基于时间点的,对于以往的信息无法与现在的信息进行对比,故写下此工具进行统计信息收集--创建数据信息的schemacreateschemadb_stat;--创建收集信息的基础表createtabledb_stat.snapshot_pg_stat_all_indexes(relidint,indexrelidint,scheman......
  • TypeScript学习之旅--编译选项-tsconfig.json
    上一篇文章提到了tsconfig.json文件中的简单配置项,如include、extends、exclude,本篇文章我们了解一下编译器选择compilerOptions1、target  用来指定ts被编译为js的ES版本有固定值,例如:‘es3’ 'es5' 'es6''es2015' 'es2018'等“target”:"es2915"2、moud......
  • Nodejs 的 fs 模块
    文件读写fs模块(文件系统模块)提供了一个用于读写文件的API。它是Node.js核心模块之一,允许你以异步或同步的方式对文件进行操作。读取异步读取文件,当文件读取完成时,调用回调函数。fs.readFile(path[,options],callback)同步读取文件,返回文件内容fs.readFileSync(path[,o......
  • JSR 303全解析
    1.JSR303是什么?JSR303(JavaSpecificationRequest303),也称为BeanValidation,是Java中的一个规范,用于定义Java对象的校验规则。1.1JSR303的主要功能   注解驱动:通过注解直接在Java类上定义校验规则。   内置约束:如@NotNull、@Size、@Min、@Max等。   自定义约束:可......
  • csharpierrc.json 配置
    CSharpier配置.csharpierrc.json{"printWidth":100,"useTabs":false,"tabWidth":4,"endOfLine":"auto"}参数说明PrintWidth​Specifyatwhatpointtheprinterwillwrapcontent.Thisisnotahardlimit.......
  • day03JS-函数
    1.什么是函数函数具有某种特定功能的代码块。函数其实本质也是一种数据,属于对象数据类型。2.为什么要有函数解决代码的冗余问题,形成代码复用。可以把整个代码项目,通过函数模块化。封装代码,让函数内部的代码对外部不可见。3.函数的组成函数的声明:function函数名(参数1,......
  • Node-RED开源流程网络工具
    文章目录Node-RED开源流程网络工具Node-RED介绍特点和设计理念Node-RDE安装Windows安装Docker安装基础功能示列HTTP发送请求MQTT-示列TCP-示列MQTT-Modbus示列Node-RED综合示列示列Node-RED开源流程网络工具Node-RED介绍Node-RED是一个基于Node.js的开源流程......
  • Java基础——HttpStatus.class 源码中状态码总结
    HttpStatus.class源码中状态码总结HttpStatus.class源码////Sourcecoderecreatedfroma.classfilebyIntelliJIDEA//(poweredbyFernFlowerdecompiler)//packageorg.springframework.http;importorg.springframework.lang.Nullable;publicenumH......