Http模块

news/2024/10/18 6:00:53/

Http模块

1.创建http服务

//导入http模块
const http = require('http')//创建服务对象
const server = http.createServer((request,response)=>{response.end('Hello HTTP Server')
})// 监听端口,启动服务
server.listen(9000,()=>{console.log('服务已启动....');
})
//node 文件名.js启动服务

浏览器中输入http://127.0.0.1:9000 得到响应’Hello HTTP Server’,如下图:
在这里插入图片描述

2.注意事项

  • 中文乱码问题
const server = http.createServer((request,response)=>{// response.end('Hello HTTP Server')response.setHeader('content-type','text/html;charset=utf-8')response.end('你好呀!')//不加请求头会中文乱码,加上setHeader后能正常显示中文
})
  • http协议的默认端口
    http默认为80;https默认为443

3.抽取http报文以及请求体

//导入http模块
const http = require('http')//创建服务对象
const server = http.createServer((request,response)=>{//请求报文//console.log(request.method);//console.log(request.url);//console.log(request.httpVersion);//console.log(request.headers);//response.end('Hello HTTP Server')//请求体let body = ''request.on('data', chunk => {body += chunk})request.on('end',()=>{console.log(body);response.end('Hello HTTP')})
})// 监听端口,启动服务
server.listen(9000,()=>{console.log('服务已启动....');
})
//node 文件名.js启动后,浏览器中输入http://127.0.0.1:9000/访问,可在vscode终端看到打印结果

4.提取http报文中的url路径和查询字符串

//导入http模块
const http = require('http')
const url = require('url')
//创建服务对象
const server = http.createServer((request,response)=>{// 方式1:// 解析request.urllet res = url.parse(request.url,true)console.log('res--->',res);// 方式2// let url2 = new URL('search?keyword=5','http://127.0.0.1:9000')let url2 = new URL(request.url,'http://127.0.0.1:9000')console.log('url--->',url2);// 输出keyword查询字符串console.log(url2.searchParams.get('keyword'));response.end('Hello HTTP URL')
})// 监听端口,启动服务
server.listen(9000,()=>{console.log('服务已启动....');
})

5.http设置响应

//导入http模块
const http = require('http')//创建服务对象
const server = http.createServer((request,response)=>{//设置响应状态码及响应状态描述response.statusCode = 404response.statusMessage = 'NOT F'// 设置响应头response.setHeader('content-type','text/html;charset=utf-8')response.setHeader('Server','Node.js')response.setHeader('myHeader','test tets')response.setHeader('test',['a','b','c'])//设置多个同名响应头// 设置响应体response.write('hi hi hi')response.end()
})// 监听端口,启动服务
server.listen(9000,()=>{console.log('服务已启动....');
})

6.设置资源类型(mime类型)

媒体类型(通常为Multipurpose Internet Mail Extensions 或MIME类型),用来表示文档、文件或字节流的性质和格式。
例如:

//charset=utf-8 可防止中文乱码问题response.setHeader('content-type','text/html;charset=utf-8')

7.设置不同错误码

//导入http模块
const http = require('http')
const fs = require('fs')
//创建服务对象
const server = http.createServer((request, response) => {response.setHeader('content-type','text/html;charset=utf-8')if (request.method !== 'GET') {response.statusCode = 405response.end('<h1>405-方法不被允许</h1>')return}let { pathname } = new URL(request.url, 'http://127.0.0.1')let filePath = __dirname + '/page' + pathnamefs.readFile(filePath, (err, data) => {if (err) {switch (err.code) {case 'ENOENT':response.statusCode = 404response.end('<h1>404 NOT FOUND</h1>')case 'EPERM':response.statusCode = 403response.end('<h1>403 无权限</h1>')default:response.statusCode = 500response.end('未知错误')}return}// response.end(data)})
})// 监听端口,启动服务
server.listen(9000, () => {console.log('服务已启动....');
})

http://www.ppmy.cn/news/1266229.html

相关文章

c语言插入排序及希尔排序详解

目录 前言&#xff1a; 插入排序&#xff1a; 希尔排序&#xff1a; 前言&#xff1a; 排序在我们生活中无处不在&#xff0c;比如学生成就排名&#xff0c;商品价格排名等等&#xff0c;所以排序在数据结构的学习中尤为重要&#xff0c;今天就为大家介绍两个经典的排序算法&…

tp5 rewrite nginx重写

tp框架,默认的访问路径是 www.xxxx.com/index.php/admin/shop/index格式的&#xff0c;为了方便和更规范&#xff0c;也看起来有逼格一些&#xff0c;需要将index.php去掉 无index.php就会报404 我这里是宝塔 #地址重写if (!-e $request_filename) {rewrite ^(.*)$ /index.…

【APP安卓测试工具】adb(Android Debug Bridge)

1.常见的命令 列出已连接的设备 adb device安装 adb install <APK文件路径>卸载 adb uninstall <APK文件路径>启动和停止 adb shell am start -n <包名>[/<Activity>]adb shell am force -stop <包名>截屏和录屏 adb shell screencap <文件路…

MeterSphere实战(一)

MeterSphere是一位朋友讲到的测试平台&#xff0c;说这东西是开源的&#xff0c;因为我是做测试的&#xff0c;很乐意了解一些新鲜事物。在我看来&#xff0c;测试就是要专注一些领域&#xff0c;然后要啥都会一点点&#xff0c;接着融会贯通起来&#xff0c;这样就可以万变不离…

【计算机网络】UDP报文详解

目录 一. UDP协议概述 二. UDP报文格式 首部 三. UDP的缓冲区 一. UDP协议概述 UDP——用户数据报协议&#xff0c;是传输层的一个重要协议 基于UDP的应用层协议有&#xff1a;DNS&#xff0c;TFTP&#xff0c;SNMP&#xff0c;NTP 协议全称默认端口号DNSDomain Name Se…

051:vue项目webpack打包后查看各个文件大小

第050个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使…

uniapp - 简单版本自定义tab栏切换

tab切换是APP开发最常见的功能之一&#xff0c;uniapp中提供了多种形式的tab组件供我们使用。对于简单的页面而言&#xff0c;使用tabbar组件非常方便快捷&#xff0c;可以快速实现底部导航栏的效果。对于比较复杂的页面&#xff0c;我们可以使用tab组件自由定义样式和内容 目录…

Openwrt源码下载出现“The remote end hung up unexpected”

最近项目原因需要下载openwrt21.02版本源码&#xff0c;花费了很多时间&#xff0c;找到正确方法后&#xff0c;发现可以节省很多时间&#xff0c;记录下过程&#xff0c;方便自己&#xff0c;可能方便他人。 一.问题阐述 openwrt21.02下载链接如下&#xff1a; git clone -…