Node【五】内置模块 【http模块】

news2024/10/7 8:20:03

文章目录

  • 🌟前言
  • 🌟http模块
    • 🌟 1.引入http模块
    • 🌟 2.创建服务
    • 🌟 3.添加头信息
    • 🌟 4.搭建一个简单的服务器:
    • 🌟 5.Request对象
    • 🌟 6.Response对象
    • 🌟 7.练习:发送时间到客户端
    • 🌟 8.练习:HTTP多次响应
    • 🌟 9.练习:静态服务器
    • 🌟 10.练习:ajax之get
    • 🌟 11.练习:ajax之post
    • 🌟 12.练习:ajax上传图片
  • 🌟写在最后

在这里插入图片描述

🌟前言

哈喽小伙伴们,新的专栏 Node 已开启;这个专栏里边会收录一些Node的基础知识和项目实战;今天我们开始这个专栏的第五篇文章,带领大家初识一下 Node内置模块 http 模块;让我们一起来看看吧🤘

🌟http模块

🌟 1.引入http模块

let http = require("http");

🌟 2.创建服务

let server = http.createServer(function(req,res){
    res.end();
})
server.listen(8000,()=>{})

🌟 3.添加头信息

响应的信息,告诉浏览器内容的类型,用什么方式去解析

res.writeHead(200,{
    'Content-type':'text/html;utf8'
})

🌟 4.搭建一个简单的服务器:

//导入http模块
var http = require('http');
//创建一个http服务器
var server = http.createServer(function (req,res) {//req请求 res响应
    res.write('hello'); //向客户的发送数据 只能为字符串或Buffer
    res.write('world');//向客户的发送数据
    res.end();//发送结束
})
server.listen(8080); //监听指定端口号

🌟 5.Request对象

属性描述
request.url客户端请求的url地址,如http://127.0.0.1/hello/world,那么request.url就是/hello/world
request.headers客户端请求的http header
request.method获取请求的方式,一般有几个选项,POST,GET和DELETE等,服务器可以根据客户端的不同请求方法进行不同的处理。

🌟 6.Response对象

属性描述
res.writeHeadresponse.writeHead(statusCode, [reasonPhrase], [headers]) res.writeHead(200,{Content-Type:‘text/plain’});
res.removeHeader(“Date”)从隐式发送的队列中移除一个响应头。
res.setTimeout(msecs, callback)设置http超时返回的时间,一旦超过了设定时间,连接就会被丢弃
res.statusCode设置返回的网页状态码
res.setHeader(name, value)设置http协议头
res.headersSent返回一个布尔值(只读)。 如果响应头已被发送则为 true,否则为 false。
res.write(chunk, [encoding])返回的网页数据,[encoding] 默认是 utf-8
res.end([data], [encoding])将设置的数据包,发送数据到客户端(完成响应)。

🌟 7.练习:发送时间到客户端

var http = require('http');
http.createServer(function (req,res) {
    var d = new Date();
    res.write(d.toString())
    res.end();
}).listen(9000);

🌟 8.练习:HTTP多次响应

var http = require('http');
http.createServer(function (req,res) {
    res.setHeader('Content-type','text/html,charset=utf-8');
    res.write('你好,世界');
    setTimeout(function () {
        res.write('我不好,人类');
        res.end();
    },2000)

}).listen(9000);

🌟 9.练习:静态服务器

var http = require('http');
var fs = require('fs');
var path = require('path');
var mime = require('mime');
http.createServer(function (req,res) {
        var url = req.url;
        console.log(url)
        if(url=='/'){url='index.html'};
        res.setHeader('Content-type',mime.lookup(url)+';charset=utf-8');
        fs.readFile('./'+url,'utf8',function (err,data) {
            res.write(data);
            res.end();
        })

}).listen(9001);

🌟 10.练习:ajax之get

//导入核心模块
var http = require("http");
var fs = require("fs");
var url = require("url");

//模拟数据
var data  = [
    "你每天都很困,只因为你被生活所困",
    "每天都在用六位数的密码,保护着两位数的存款",
    "年纪越大,越没有人会原谅你的穷",
    "全世界都在催你早点,却没人在意你,还没吃'早点'",
    "小时候总骗爸妈自己没钱了,现在总骗爸妈,没事~我还有钱"
];

//创建服务器
var server = http.createServer(function(req,res){
    var urlObj = url.parse(req.url,true);
    if(req.url"/"||req.url"/index.html"){
        fs.readFile("./index.html",function(err,data){
            res.write(data);
            res.end();
        })
    }
    if(urlObj.pathname=="/search"){
        var d = data.filter((val,index)=>{
            return val.indexOf(urlObj.query.s)==-1?false:true;
        });
        res.write(JSON.stringify(d));
        res.end();
    }
})

//监听服务器
server.listen(3000);

🌟 11.练习:ajax之post

//引入核心模块
var http = require('http');
//引用URL解析URL参数
var url = require('url');
//读写文件
var fs = require('fs');
var querystring = require('querystring');
//创建http服务器
//只有当提交form表单,并且是GET请求的时候,浏览器才会把表单进行序列化拼到URL后面
http.createServer(function(req,res){
    //一定会返回一个对象
    // true的话urlObj的query也会是一个对象,否则就是一个字符串
   // username=zfpx&password=123 -> {username:'zfpx',password:123}
    var urlObj = url.parse(req.url,true);
    //路径名
    var pathname = urlObj.pathname;
    if(pathname == '/'){
        //读取文件的内容
        fs.readFile('./index.html','utf8',function(err,data){
                res.end(data);
        })
    }else if(pathname == '/reg'){
        var result='';
        //当读到客户端提交过来的数据时会触发data事件,然后调用回调函数
        req.on('data',function(data){
            result +=data;
        })
        req.on('end',function(data){
            var contentType = req.headers['content-type'];
            if(contentType =='application/x-www-form-urlencoded'){
                var obj = querystring.parse(result);
                console.log(obj);
            }else if(contentType == 'application/json'){
                var obj  = JSON.parse(result);
                console.log(obj);
            }
            res.end('ok');
        })
    }else if(pathname == '/reg2'){
        res.end('ok2');
    }
}).listen(8080);

🌟 12.练习:ajax上传图片

使用第三方包 formidable

var http = require('http');
var url = require('url');
var fs = require('fs');
var formidable = require('formidable');
var querystring = require('querystring');
var util  = require('util');
var mime  = require('mime');

// 构建一个解析器
var formParser = new formidable.IncomingForm();
///用解析器解析请求体
//把非file的input放在fields里
//把文件类型的元素放在files里
formParser.parse(req, function(err, fields, files) {
   fs.readFile(files.avatar.path,function(err,data){
       console.log(files.avatar);
       var filename = '/imgs/'+files.avatar.name;
       fs.writeFile('.'+filename,data,function(err){
           res.writeHead(200,{'Content-Type':'text/plain'});
           res.end(filename);
       })
   })
});

🌟写在最后

更多Node知识以及API请大家持续关注,尽请期待。各位小伙伴让我们 let’s be prepared at all times!

✨原创不易,还希望各位大佬支持一下!
👍 点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富!

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

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

相关文章

【力扣周赛】第340场周赛

【力扣周赛】第340场周赛6361:对角线上的质数题目描述解题思路6360:等值距离和题目描述解题思路6361:对角线上的质数 题目描述 描述:给你一个下标从 0 开始的二维整数数组 nums ,返回位于 nums 至少一条 对角线 上的…

webgl-原生纹理贴图

踩坑: 1、图片不显示:图片分辨率为非2的幂次方,图片不能被渲染。图形变成黑方块 2的N次幂:1 2 4 8 16 32 64 128 256 512 1024 2048 4096…… 2、几何图形配置映射方式,顶点坐标和纹理坐标对应需要注意,构…

并行分布式计算 并行计算机体系结构

文章目录并行分布式计算 并行计算机体系结构并行计算机结构模型SIMD 单指令多数据流PVP 并行向量处理机SMP 对称多处理机MPP 大规模并行处理机DSM 分布式共享存储多处理机COW 工作站集群总结并行计算机访存模型UMA 均匀存储访问模型NUMA 非均匀存储访问模型COMA 全高速缓存存储…

OpenCV实战之广角相机拍照算法

拍照是手机中的一项重要功能,目前常见的千元机中都包含数个相机模组,能够实现虚化拍照、美颜、广角拍照、夜景等功能。手机是一个拥有巨大销量的电子产品,因此成为图像处理算法的一个重要落地场景。很多AI公司聚焦于此,如虹软、旷…

Docker已经创建运行启动的容器,如何修改容器中的环境变量env使长期有效

1.查看Docker Root目录 docker info | grep Docker Root[rootjenkins ~]# docker info | grep ‘Docker Root’ Docker Root Dir: /data/docker 2.查到容器的长id(container id) 方式一: docker inspect pdmaas | grep "Id"方式…

scikit-learn决策树算法笔记总结

1. scikit-learn决策树算法类库介绍 scikit-learn决策树算法类库内部实现是使用了调优过的CART树算法,既可以做分类,又可以做回归。分类决策树的类对应的是DecisionTreeClassifier,而回归决策树的类对应的是DecisionTreeRegressor。两者的参…

20230409英语学习

Dog Philosophy 101:What Dogs Teach Us About Life 狗狗教给我们的人生哲学 I recently was pleased to receive an honorary Doctor of Science Degree from the University of Guelph.As part of the ceremony I was asked to give a convocation address to the…

Openlayers(五)点位聚合Cluster

Openlayers(五)点位聚合Cluster 1.业务问题 由于点位在地图上显示过多,会造成页面卡顿、点位标注信息相互叠加导致看不清 优化后效果 不断放大层级 2.聚合类Cluster OpenLayers 中聚合是通过 ol.source.Cluster 实现,聚合的原…

如何写出10万+ Facebook 贴文?

想要创作一篇优秀的Facebook贴文,首先要考虑以下几个问题: 1.文案特点 一篇清晰简洁的文案有助于受众在有限的浏览时间内快速了解你想要展示的信息。根据以往经验,文案内容最好保持在20个汉字以内,加上链接描述最好也不要超过50…

学习Pycharm使用方法(一):Pycharm中Make available to all projects的含义是什么

Make available to all projects一、为什么要进行包管理二、怎么做1、命令行(情况一)第一步:先安装虚拟环境模块第二步 :激活虚拟 环境2、Pycharm(情况二)三、项目部署时批量导包一、为什么要进行包管理 Python中的第三方包提供了各种功能&a…

十五分钟带你学会 Docker

文章目录虚拟化与容器化什么是 DockerDocker 工作原理安装 DockerDocker 核心概念Docker fileImageContainerDocker 流程示例Docker 常用命令Dockerfile 常用指令Docker 网络通信Docker ComposeDocker Hub虚拟化与容器化 虚拟化技术是一种将计算机物理资源进行抽象、转换为虚拟…

【C++】类与对象(下)

系列文章 若想了解什么是类、封装的意义可以移步 【C】类与对象(引入) 若对六大成员函数或const成员函数有疑问的这篇文章可能可以帮到你 【C】类与对象(上) 目录 系列文章 前言 1.初始化列表 1.1概念 1.2特性 1.2.1必须使…

29考虑特性分布的储能电站接入的电网多时间尺度源储荷协调调度策略MATLAB程序-日前日内实时+需求响应+协调调度

资源地址: 29考虑特性分布的储能电站接入的电网多时间尺度源储荷协调调度策略MATLAB程序-日前日内实时需求响应协调调度-Matlab文档类资源-CSDN文库 参考文献: 考虑特性分布的储能电站接入的电网多时间尺度源储荷协调调度策略——金力 主要内容&…

Python入门教程+项目实战-9.3节: 字符串的操作方法

目录 9.3.1 字符串常用操作方法 9.3.2 获取字符串长度 9.3.3 字符串的大小写操作 9.3.4 删除字符串中的空白字符 9.3.5 字符串的子串查找 9.3.6 字符串的子串统计 9.3.7 字符串的子串替换 9.3.8 字符串的拆分函数 9.3.9 字符串的前缀与后缀9.3.10 知识要点 9.3.11 系…

一文教你认识分布式微服务开源框架

说到办公效率提质增效的问题,就需要了解分布式微服务开源框架了。因为这是助力企业做好数据管理、实现信息互通的得力助手和工具。在数字化发展进程越来越快的今天,实现办公自动化发展是不少用户的心愿和发展方向,采用分布式微服务开源框架可…

APK打包流程

(图是从别地儿抠过来的,所以不清晰 。) AAPT: 首先,安卓APP的资源这一块,会通过aapt进行一个编译,这个工具编译的时候,会首先会把我们的这个xml文件生成这一个R.java,然后再就是像m…

google账号注册流程升级了!2023年谷歌gmail邮箱帐号注册申请教程(完整版)

google账号注册升级了! 2023年4月份google账号注册流程升级了,升级之前的版本是完成验证手机号码后才填写用户资料,升级之后的版本是需要先填写用户资料才能注册谷歌gmail邮箱帐号; 2023年谷歌gmail邮箱帐号注册申请教程 1、打开…

ChatGPT扩展系列之解决ChatGPT 被大面积封号的终极方案

ChatGPT扩展系列之解决ChatGPT 被大面积封号的终极方案 本节介绍了一个解决ChatGPT在中国大陆无法使用和担心被封号的问题的方法。近期有很多亚洲用户被封号,原因是有人滥用API接口或者批量注册账号,不符合官方规定。对于这个问题,提出了一个解决方法,可以在中国大陆无需翻…

【NLP】pyltp工具介绍、安装和使用代码+示例

【NLP】pyltp工具介绍、安装和使用pyltp 文章目录【NLP】pyltp工具介绍、安装和使用pyltp1. 介绍2. 使用2.1 分句2.2 分词2.3 词性标注2.4 命名实体识别2.5 依存句法分析2.6 词义角色标注2.7 完整示例3. 参考1. 介绍 什么是pyltp pyltp 是LTP的 Python 封装,提供了…

uniapp - 全平台兼容的 “多图上传“ 功能,搭配 uview 组件库中的 upload 上传组件(附带详细的示例源码及注释,可直接复制使用或简单修改)

效果图 使用 uniapp 开发,多平台全端兼容的多图上传功能,支持限制个数及移除等。 组件库使用的是 uview 框架,上传组件基于 Upload组件,功能完美无bug。 准备阶段 Upload组件支持手动上传与