Http模块

news2024/12/22 19:32:31

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.url
    let 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 = 404
    response.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 = 405
        response.end('<h1>405-方法不被允许</h1>')
        return
    }
    let { pathname } = new URL(request.url, 'http://127.0.0.1')
    let filePath = __dirname + '/page' + pathname
    fs.readFile(filePath, (err, data) => {
        if (err) {
            switch (err.code) {
                case 'ENOENT':
                    response.statusCode = 404
                    response.end('<h1>404 NOT FOUND</h1>')
                case 'EPERM':
                    response.statusCode = 403
                    response.end('<h1>403 无权限</h1>')
                default:
                    response.statusCode = 500
                    response.end('未知错误')
            }
            return
        }
        // response.end(data)
    })
})

// 监听端口,启动服务
server.listen(9000, () => {
    console.log('服务已启动....');
})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1303959.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代理模式:解析对象间的间接访问与控制

目录 引言 理解代理模式 不同类型的代理模式 代理模式的应用场景 代理模式的优缺点 优点 缺点 实际案例&#xff1a;Java中的代理模式应用 结语 引言 代理模式是软件设计模式中的一种结构型模式&#xff0c;旨在为其他对象提供一种代理以控制对这个对象的访问。它允许你…

【Linux】less 命令使用

less命令 less 与 more 类似。 less是一个非常常用的文本查看工具&#xff0c;它可以用于查看任意大小的文本文件&#xff0c;支持滚动翻页、搜索、标记等功能。在本文中&#xff0c;我们将详细介绍less命令的用法、参数和实例&#xff0c;并对其背后的原理和相关技术进行简要…

局域网上网行为监控软件有哪些(功能介绍大全)

作为老板的你&#xff0c;是不是经历过这些事情&#xff1a; 员工上班时间总是利用公司电脑摸鱼&#xff1b;公司的网络被人占用&#xff1b;员工上网行为异常&#xff1b;员工的工作状态不饱和&#xff0c;总是懒散…… 不可否认&#xff0c;现在的员工越来越难管理&#xf…

张驰咨询:数据驱动的质量改进,六西格玛绿带在汽车业实践

尊敬的汽车行业同仁们&#xff0c;您是否曾面临生产效率低下、成本不断攀升或顾客满意度下降的困扰&#xff1f;本期专栏&#xff0c;我们将深入探讨如何通过六西格玛绿带培训&#xff0c;在汽车行业中实现过程优化和质量提升。 汽车行业的竞争日趋激烈&#xff0c;致力于提供…

vue 实现点击复制文本到剪贴板

vue 实现点击复制文本到剪贴板 共四种方法 1. navigator.clipboard.writeText该方法需要在安全域下才能够使用&#xff0c;比如&#xff1a;https 协议的地址、127.0.0.1、localhost <template><div><el-button type"primary" click"btn1"…

互联网公司,哪个部门才是鄙视链最顶端?

文章目录 每日一句正能量前言财务部法务部公关部销售部前台行政IT部创意部后记 每日一句正能量 我们必须在失败中寻找胜利&#xff0c;在绝望中寻求希望。 前言 在互联网公司中&#xff0c;不同职位的鄙视链是存在的。有些职位享有高尚的地位&#xff0c;而有些则被看作是次要…

弧光保护能应用在船舶中压配电板?

摘要&#xff1a;船舶中压配电板弧光故障导致的设备损坏和停电事故&#xff0c;不仅会造成较大的经济损失&#xff0c;而且严重影响船舶电站的安全稳定运行&#xff0c;威胁船舶电站操作人员的安全。弧光保护是基于电力系统开关柜发生弧光故障时而设计的一套母线保护系统&#…

[基础IO]文件描述符{C库函数\系统接口\初识fd}

文章目录 1.基础知识1.1对文件的认识1.2对系统调用接口的认识1.3如何理解LInux下一切皆文件? 2.C语言的库函数2.1FILE *fopen(const char *path, const char *mode);2.2对fopen()的mode的w/a的深层认识2.3fclose()2.4size_t fwrite(const void *ptr, size_t size, size_t nmem…

固态硬盘无法识别?三大方法帮你搞定

随着科技的迅猛发展&#xff0c;固态硬盘&#xff08;SSD&#xff09;已成为许多计算机用户首选的存储设备。然而&#xff0c;有时我们可能会遭遇固态硬盘无法识别的问题&#xff0c;这给用户带来了不便与困扰。本文将深入研究固态硬盘无法识别的原因&#xff0c;并为您提供三种…

STM32 寄存器配置笔记——USART DMA接收

一、简介 本文主要介绍STM32如何配合USART的IDLE中断实现USART DMA接收不定长的数据。其中使用的接收缓存还是延用前面博客写的乒乓缓存。使用DMA USART接收来替代中断方式或轮询方式的接收主要是为了提高代码的运行效率&#xff0c;中断方式的接收&#xff0c;每接收一个字节便…

RZ、NRZ、NRZI、曼彻斯特编码

1、RZ编码 RZ编码也成为归零码&#xff0c;归零码的特性就是在一个周期内&#xff0c;用二进制传输数据位&#xff0c;在数据位脉冲结束后&#xff0c;需要维持一段时间的低电平 2、NRZ编码 NRZ编码也成为不归零编码&#xff0c;即高电平表示1&#xff0c;低电平表示0。它与RZ码…

swing快速入门(六)

注释很详细&#xff0c;直接上代码 上一篇 本篇新增内容 Gridlayout&#xff08;网格布局&#xff09; Textfield组件的最大限定长度 Panel()的默认布局方式 Gridlayout的默认布局位置 import java.awt.*;public class swing_test_4 {public static void main(String[]ar…

Android 11.0 systemui锁屏页面时钟显示样式的定制功能实现

1.前言 在11.0的系统ROM定制化开发中,在进行systemui的相关开发中,当开机完成后在锁屏页面就会显示时间日期的功能,由于 开发产品的需求要求时间显示周几上午下午接下来就需要对锁屏显示时间日期的相关布局进行分析,然后实现相关功能 效果图如图: 2.systemui锁屏页面时钟显…

c语言->自定义类型联合体和枚举类型

系列文章目录 文章目录 前言 ✅作者简介&#xff1a;大家好&#xff0c;我是橘橙黄又青&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;橘橙黄又青_C语言,函数,指针-CSDN博客 目的&#xff1a;学习联合体和枚举类型的…

Web安全之XXE漏洞原理及实践学习

一、原理&#xff1a; XXE漏洞全称即XML外部实体注入漏洞。 攻击者强制XML解析器去访问攻击者指定的资源内容(可能是系统上本地文件亦或是远程系统上的文件)&#xff0c;导致可加载恶意外部文件&#xff0c;利用file协议造成文件读取、命令执行、内网端口扫描、攻击内网网站等…

网络基础(五):网络层协议介绍

目录 一、网络层 1、网络层的概念 2、网络层功能 3、IP数据包格式 二、ICMP协议 1、ICMP的作用和功能 2、ping命令的使用 2.1ping命令的通用格式 2.2ping命令的常用参数 2.3TypeCode&#xff1a;查看不同功能的ICMP报文 2.4ping出现问题 3、Tracert 4、冲突域 5、…

农副产品行业ERP有哪些?农副产品行业ERP是做什么的

现实生活当中有很多种类的农副产品&#xff0c;这些琳琅满目的商品有多元化的营销渠道和策略&#xff0c;同时在保质期、包装、价格策略、配料、生产工艺等诸多方面存在明显的差异。 由于行业的特殊性&#xff0c;传统的人工统计分析工作量较大&#xff0c;同时也难以确保业务…

酷开系统丨非比寻常,酷开科技带你感受智能电视的妙处

智能电视的出现不仅改变了人们的观影方式&#xff0c;也在一定程度上改变了人们的生活方式。有人说&#xff0c;选择电视机其实就是在选择智能电视系统。在纷乱繁杂的电视市场里&#xff0c;想必大家在挑选的时候也是费尽了心力。 众所周知&#xff0c;内容已经成为衡量智能电…

各个数据库存二进制大文件性能测试

1前言 ​ 有个项目软件前端将二进制大文件存在了indexDB,每次给后端传文件&#xff08;需要传到底层C进行调用&#xff09;都会导致内存占用飙升&#xff0c;想着使用前后端都能共同操作的数据库来解决这个内存占用的问题&#xff0c;并且希望这个更具尽可能的轻量&#xff0c…

案例044:基于微信小程序的消防隐患在线举报系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…