Node.js的http模块

HTTP模块简介

Node.js的http模块基于Node.js的异步非阻塞I/O模型,使得构建高性能的Web服务器成为可能。这个模块提供了两个主要的类:http.Serverhttp.ClientRequest(以及http.IncomingMessage用于处理响应)。

  • http.Server:用于创建HTTP服务器,监听HTTP请求,并对这些请求做出响应。
  • http.ClientRequesthttp.IncomingMessage:用于处理HTTP客户端请求和响应。

创建HTTP服务器

创建HTTP服务器是http模块最常见的用途之一。下面是一个简单的HTTP服务器示例,它监听3000端口,并对所有请求返回“Hello, World!”:

const http = require('http');  
  
// 创建HTTP服务器  
const server = http.createServer((req, res) => {  
  // 设置响应头  
  res.writeHead(200, {'Content-Type': 'text/plain'});  
  // 发送响应体  
  res.end('Hello World\n');  
});  
  
// 监听3000端口  
server.listen(3000, () => {  
  console.log('Server running at http://localhost:3000/');  
});

在这个例子中,我们首先通过require('http')引入了http模块。然后,使用http.createServer()方法创建了一个服务器,该方法接受一个回调函数作为参数,该回调函数会在每次接收到请求时被调用。回调函数有两个参数:req(请求对象)和res(响应对象)。通过res.writeHead()方法设置响应的HTTP状态码和响应头,然后通过res.end()方法发送响应体并结束响应过程。最后,通过server.listen()方法让服务器监听指定的端口(在这个例子中是3000端口)。

处理请求和响应

在实际应用中,HTTP服务器需要能够处理不同类型的请求并作出相应的响应。
前端发起请求,常用的就是 GET POST,通过method进行区分

const app=http.createServer((req,res)=>{
  const { pathname, query } = url.parse(req.url,true);
  console.log(pathname);
  if(req.method === 'POST') {
  }
  else if(pathname === '/get') {
  }
})

对post请求带参数的处理

http://localhost:3000/post/login
// 参数
{
    "name":"zl",
    "age": 18
}
const http = require('http');
const url = require('url');

const app = http.createServer((req, res) => {
  // 解析请求的 URL,获取路径和查询参数
  const { pathname, query } = url.parse(req.url, true);
  // 检查请求方法是否为 POST
  if (req.method === 'POST') {
    // 检查路径是否为 '/post/login'
    if (pathname === '/post/login') {
      let data = ''
      // 监听数据接收事件
      req.on('data', (chunk) => {
        // 将接收到的数据添加到 data 变量中
        data += chunk
      })
      // 监听数据接收完成事件
      req.on('end', () => {
        // 设置响应头和状态码
        res.setHeader('Content-Type', 'application/json')
        res.statusCode = 200
        // 将接收到的数据作为响应体返回
        res.end(data)
      })
    }
    else {
      // 如果路径不是 '/post/login',返回 404 错误
      res.statusCode = 404
      // 将响应体设置为 '404 Not Found'
      res.end('404 Not Found')
    }
  }
  else if (req.method === 'GET') {
  }
})

app.listen(3000, () => {
  console.log('server is running at 3000');
})

结果:

在这里插入图片描述

对get请求的处理,通过query接收参数

//地址
http://localhost:3000/get?a=1&b=2

const http = require('http');
const url = require('url');

const app = http.createServer((req, res) => {
  const { pathname, query } = url.parse(req.url, true);
  if (req.method === 'POST') {
    if (pathname === '/post/login') {
      let data = ''
      req.on('data', (chunk) => {
        data += chunk
      })
      req.on('end', () => {
        res.setHeader('Content-Type', 'application/json')
        res.statusCode = 200
        res.end(data)
      })
    }
    else {
      res.statusCode = 404
      res.end('404 Not Found')
    }
  }
  else if (req.method === 'GET') {
    if (pathname === '/get') {
      console.log(query);
    }
  }
})

app.listen(3000, () => {
  console.log('server is running at 3000');
})

打印的query结果

在这里插入图片描述

客户端接收的消息

在这里插入图片描述

调试工具

在这里插入图片描述

安装rest client,然后新建文件request.http(后缀必须以http结尾)
模拟接口

POST http://localhost:3000/post/login HTTP/1.1

Content-Type: application/json

{
    "name":"zl",
    "age": 18
}


GET http://localhost:3000/get?a=1&b=2 HTTP/1.1

点击发送请求

在这里插入图片描述

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值