NODE笔记 1 http模块

这篇具有很好参考价值的文章主要介绍了NODE笔记 1 http模块。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简单的http模块也包含https模块的简单介绍,应用,补充模块化内容

目录

前言

一、http模块 简单使用 

0.基础用法

1.获取请求信息

二、 https模块练习

0. 使用https模块向接口发送请求 

1.引入axios库发送 https请求

2.基础补充:模块化 与 npm包管理

模块化

npm包管理

总结


简单介绍并结合飞书多维表格进行代码测试

前言

node 提供了 http 模块,首先需要简单的介绍http

http协议(超文本传输协议),在web和网络领域都十分重要。在客户-服务通讯的请求响应中,报文大都是基于http。


 可以先新建一个简单的js文件,引入http模块,保存demo后,进入控制台,输入 node 文件名.js 后,打开网址即可进行调试学习。终止该服务可以在cmd界面按 Ctrl+C。

一、http模块 简单使用 

0.基础用法

写入简单的js文件保存,demo如下:

var http = require('http') ;
const { type } = require('os');

var httpServer = http.createServer((request,response)=>{
    response.setHeader("content-type","text/html;charset=utf-8")
    response.write('\r\n this is 9012 httpdemo02 program ,中文测试 \r\n');
    response.end('\r\n http Server End ') ;
});

httpServer.listen('9012',()=>{ 
    console.log('\r\n server is listen 9012 port  ');
});

结果如下:

NODE笔记 1 http模块,笔记 response.setHeader('content-type','text/html;charset=utf-8'); 设置响应头可以正常显示中文

更新代码需要先在终端终止该服务,再启动该服务。响应体含有中文,需要设置响应头 。同时,代码中的 \r\n 并未起到换行效果。

1.获取请求信息

http模块的 创建服务模块中的创建服务的回调函数参数中的request和response分部表示请求和响应。可以在node中接收请求信息。代码如下:

const http = require('http') ;

var httpServer = http.createServer((request,response)=>{
    let {url,method} = request ;
    response.setHeader("content-type","text/html;charset=utf-8");
    response.write(request.url+"<---url---method->");
    response.write(request.method);
    response.end('   Server node demo03 end');
}) ;

httpServer.listen('9013',()=>{console.log("port 9013 listen ");
});

效果如图:NODE笔记 1 http模块,笔记

关于路径:如果访问网站的时候,只填写了IP地址或者是地域名信息,此时请求的路径为 / 

NODE笔记 1 http模块,笔记

关于favicon.ico:这个请求是属于浏览器自动发送的请求

 URL仅支持路径和查询参数,method默认为GET ,其他参数如下 :

含义 语法内容
请求方法 request.method
请求路径 request.url
请求头 request.headers
URL路径

 require('url').parse(request.url).pathname;

URL字符串查询  require('url').parse(request.url,TRUE).query;


注意事项:
1.request.url只能获取路径以及查询字符串,无法获取URL中的域名以及协议的内容
2.request.headers将请求信息转化成一个对象,并将属性名都转化成了「小写」

3.添加 HTTP 标头信息和读取query字符串....

二、 https模块练习

http 与 https 模块基本差不多,https用的比较多,本次使用https并引入比较常用的axios模进行简单的测试练习。

0. 使用https模块向接口发送请求 

const https = require('https') ;
 
let fs = require('fs');
 https.get('https://XXXXX.XXXXX.cn/api', function (res) {
     var json = '';
    res.on('data', function (d) {
        json += d;
       
    });

    res.on('end',function(){
        //获取到的数据
        json = JSON.parse(json);

        // console.log(json.list) ;
        var jsonListData = json.list ;
        let ws = fs.createWriteStream('E:\\nodePra\\infor.txt');
        for(var index=0;index<jsonListData.length;index++){
            // ws.write(index+"--------"+"\r\n"  ) ;
  ws.write(jsonListData[index].unicode+"\r\n") ;
  ws.write(jsonListData[index].name+"\r\n") ;
  ws.write(jsonListData[index].mobile+"\r\n") ;
  ws.write(jsonListData[index].field_6321+"\r\n") ;
    ws.write(jsonListData[index].field_6698+"\r\n") ;
    ws.write(jsonListData[index].field_9073+"\r\n") ;
    ws.write(jsonListData[index].field_9567+"\r\n") ;
   ws.write(jsonListData[index].field_8156+"\r\n") ;
    ws.write(jsonListData[index].field_5028+"\r\n") ;
   ws.write(jsonListData[index].field_4156+"\r\n") ;
    ws.write(jsonListData[index].field_6281+"\r\n") ;
   ws.write(jsonListData[index].field_9997+"\r\n") ;
    ws.write(jsonListData[index].field_1486+"\r\n") ;
   ws.write(jsonListData[index].field_5396+"\r\n") ;
  
            ws.write(jsonListData[index].signin_time+"\r\n"+"\r\n"  ) ;
        }
        ws.end ;
        console.log("json.list") ;
    });
}).on('error', function (e) {
    console.error(e);

});

在以上代码中隐藏了接口的域名信息,将接口响应的数据写入到了指定的infor.txt文件中。http和https的请求模块差不多,但是实际中https用的多一些。

 

1.引入axios库发送 https请求

axios是node常用的包,安装好axios后,按照飞书文档要求 发送https请求后获取令牌,测试代码如下(示例):

const https = require('https')  ;
const axios = require('axios')  ;
const fs    = require('fs')  ;
 
// 定义请求数据 
var data = JSON.stringify({ 
    "app_id": 'cli_a508f2d7e17f900c', 
    "app_secret": 'iuyQeUFnYZbbK2MqYWT8MhyCShat4Y0A', 
}); 

// 定义请求参数 
var options = { 
    url:'https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal',
    method: 'POST', 
    headers: { 
    'Content-Type': 'application/json; charset=utf-8', 
    }, 
        data: data 
}; 

let tenant_access_token = "tenant_access_token---" ; 

 
async  function getToken(){
 
    await axios(options)
.then(response => {
     console.log("response: "+ response.data.tenant_access_token);
    tenant_access_token = response.data.tenant_access_token ;
    let tenantToken = fs.createWriteStream('E:\\nodePra\\tenant_access_token.txt');
    tenantToken.write(tenant_access_token) ;
    tenantToken.end ;
    return response.data.tenant_access_token  ;
})
.catch(function (error) {
    console.log("erro : "+error);
  }) 
    
   
}   


getToken();
  

安装axios模块,可以先进入cmd命令后直接输入   npm install axios 后直接进行安装,如果node代码在其他文件夹下,可以在cmd中进入指定文件夹,或者在安装了 codeRunner 插件的Vscode中 切换到 terminal  菜单下,输入 npm install save axios 执行,在该代码所在文件夹下即会出现新的axios模块。

在获取到令牌后,即可将令牌首先写入到文件中保存,后期再请求中直接读取该模块。在多维表格中新增数据,具体操作见文档。

2.基础补充:模块化 与 npm包管理

模块化

      就是将一些功能封装后将改服务暴露出去,其他模块需要该服务可以直接以请求服务的方式获取该模块的服务,在上一段代码中最后的结果获取到令牌后,可以将该功能模块 化,其他代码需要令牌操作,直接请求该服务即可。代码如下:

 //addressTenantToken 是 字符串, getTenantToken 是函数 
   module.exports ={addressTenantToken,getTenantToken}  ;

 其他模块需要该功能需要请求服务,当路径相同时,直接使用相对路径引用该功能,引用该功能暴露数据,测试代码如下:

 const information = require('./feishuDemo_01.js') ;
//information  可以使用其他名字代替,此处作为被引用块的代指
 information.getTenantToken();
 console.log(information.addressTenantToken);

CommonJS : 一种node规范标准 。  ES6引入了新的特性,node使用 方式进行导入导出可以参考 这篇介绍  &  问题处理 。

在引入相关模块时一般使用相对路径;对js和json文件,导入时可以省略后缀(但是我个人一般不会进行省略)二者名称相同时,node优先导入js文件。node也可以导入其他后缀的文件,在该文件中 使用 module.exports 即可被引用。 

require也支持文件夹导入,但是在文件夹中的 package.json 文件中要有 main属性对应的文件是否存在,如果没有则报错,引入的实际是main属性对应的路径下的对应文件。若 package.json文件不存在,node则寻找index.js 或 index.json ,如果都没有,就报错。

(自定义)模块的导入  require 的使用:(了解即可,闭包概念)

1.将相对路径转为绝对路径         ,定位目标文件  (path.resolve)
2.缓存检测  (硬件检测cache下的模块是否有导入过)
3.读取目标文件代码   (fs模块使用 返回值为buffer)
4.包裹为一个函数并执行(自执行函数)。通过arguments.callee.toString()查看自执行函数
5.缓存模块的值
6.返回module.exports的值
 NODE笔记 1 http模块,笔记

npm包管理

npm(node pacakage manager)是node的官方包管理工具,也有yarn 和 cnpm,类似Java的maven。在安装node时一般会自动安装,在cmd界面输入以下命令即可查看:

npm -v

即可展示npm版本。 如果没有展示相应npm版本信息或者报错,可以手动安装,此处不再讨论。   对于npm可以进行初始化包(E:\opBitable)。打开cmd到对应的文件夹下,输入命令 :

npm init

NODE笔记 1 http模块,笔记

按文字提示,初始化命令会帮助用户创建一个 package.json 文件,包含了大量公共的常用的命令,此处还要输入package name,输入  bitableUpdate 作为包名 后回车 显示 Sorry, name can no longer contain capital letters.,不能有大写字母,更改名字为  bitable_change ,之后输入默认版本号(x.x.x,x必须为数字),license等信息。其他默认或者直接敲回车即可 ,结果:NODE笔记 1 http模块,笔记

在该文件夹下生成 package.json ,即初始化配置文件,完成初始化配置。

工具包可以直接搜索使用,网址  下直接搜索下载使用 之前用的axios搜索 。NODE笔记 1 http模块,笔记


之前使用 npm install axios 就是将axios安装到本地,执行结果如下:NODE笔记 1 http模块,笔记

在该路径下可以直接使用require导入使用。  

总结

     简单介绍了node的http模块和使用https模块与axios模块结合飞书文档进行简单的发送请求获取响应信息,由于种种原因,将响应信息写入到了磁盘的文件中,比较影响性能。 优化中可能会涉及到的  同步,异步,阻塞,promise 介绍,async-await 使用,闭包原理 等问题没有做展开,后期优化有需要再进行讨论 。

  补充了一部分模块化与包管理的基础介绍,这也并不完整,生产/开发环境,生产/开发依赖概念,异同,使用 命令,npm全局安装(npm root -g)与卸载(npm -r ),包管理,后期再进行内容更新。文章来源地址https://www.toymoban.com/news/detail-791566.html

到了这里,关于NODE笔记 1 http模块的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • node使用http模块

    提示:这里可以添加本文要记录的大概内容: 注意点: 解决乱码问题:res.setHeader(‘Content-Type’,‘text/plain;charset=utf8’); 文件夹中加上index.html、login.html、404.html文件 (1)作用:get主要用来获取数据,post用来提交数据。 (2)参数位置:get参数在url后面,post在请求体里面。

    2024年02月05日
    浏览(35)
  • node 学习 - HTTP模块

    Hypertext Transfer Protocol (超文本传输协议) 互连网应用最广泛的协议之一 协议:双方必须共同遵从的一组约定 http 协议对浏览器和服务器之间的通信进行约束 请求 = 请求报文 响应 = 响应报文 请求报文结构: 请求行:请求方法 + URL + HTTP版本号 GET [https://www.baidu.com/](https://ww

    2024年02月07日
    浏览(27)
  • 【node.js】03-http模块

    目录 一、什么是http模块 二、创建基本的WEB服务器 三、req请求对象 四、res响应对象 五、根据不同的url响应不同的JSON内容         http 模块是 Node.js 官方提供的、用来创建 web 服务器的模块。通过 http 模块提供的 http.createServer() 方法,就能方便的把一台普通的电脑,变成一

    2024年02月15日
    浏览(42)
  • node.js的http模块

    http协议 :超文本传输协议(互联网应用最广泛的协议之一) http请求方法: get获取数据 post新增数据 put/patch更新数据 delete删除数据 head/options/connect/trace URL 统一资源定位符,其本身也是一个字符串。 在网络节点中,负责消费资源的电脑,叫做客户端。 负责对外提供网络资源

    2024年02月08日
    浏览(70)
  • Node.js http 模块详解:request 对象

    前文介绍了 http 模块的基本用法,主要就是调用 createServer 和 listen 方法来创建和启动服务。要处理具体的 HTTP 请求,就要在 createServer 方法中写点什么。本文来介绍处理请求的两个核心对象之一的 request 。 HTTP 协议最早设计出来,仅仅为了获取网络上的某个 HTML 文档。随着后

    2024年02月08日
    浏览(40)
  • Node.js HTTP 模块的内存泄露问题

    很久没有逛社区了,晚上回来看了一下最近的情况,突然看到一个内存泄露问题,作为一个 APM 开发者,自然想分析其中的原因。 下面介绍一下具体的问题。看一下 demo。 Node.js v20.3.1 下执行上面代码(node --expose-gc demo.js)输出如下。 可以看到内存不断在增长。下面来分析这

    2024年02月12日
    浏览(44)
  • 【Node.js学习 day3——http模块】

    命令行 ctrl + c 停止服务 当服务启动后,更新代码必须 重启服务才能生效 响应内容中文乱码的解决办法 端口号被占用 关闭当前正在运行监听端口的服务(使用较多) 修改其他端口号 HTTP协议默认端口是80。HTTP服务开发常用端口有3000,8080,8090,9000等。 想要获取请求的数据,需

    2024年02月02日
    浏览(41)
  • Node.js-fs、path、http模块

    Node.js 作为一个JavaScript 的运行环境,仅仅提供了基础的功能和 AP1。然而,基于 ode.s 提供的这些基础能,很多强大的工具和框架如雨后春笋,层出不穷,所以学会了 Nodejs,可以让前端程序员胜任更多的工作和岗位: 基于Express 框架(http://www.expressjs.com.cn/),可以快速构建 Web 应用

    2024年02月04日
    浏览(43)
  • 【佳学基因检测】Node.js中http模块的使用

    先看代码: 该代码片段是使用Node.js的http模块创建一个简单的HTTP服务器。我们可以逐句来解释它的功能: http.createServer(function (req, res) { … }: http是Node.js中的核心模块,用于处理HTTP操作。此处的createServer是http模块中的一个方法,它用于创建一个新的HTTP服务器。 function (req,

    2024年02月05日
    浏览(35)
  • node.js内置模块fs,path,http使用方法

    NodeJs中分为两部分 一是V8引擎为了解析和执行JS代码。 二是内置API,让JS能调用这些API完成一些后端操作。 内置API模块(fs、path、http等) 第三方API模块(express、mysql等) fs模块 fs.readFile()方法,用于读取指定文件中的内容。 fs.writeFile()方法,用于向执行的文件中写入内容 path路径处

    2024年02月12日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包