NODE笔记 1 http/https模块介绍与简单应用

简单的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  ');
});

结果如下:

 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 ");
});

效果如图:

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

关于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的值
 

npm包管理

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

npm -v

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

npm init

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

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

工具包可以直接搜索使用,网址  下直接搜索下载使用 之前用的axios搜索 。


之前使用 npm install axios 就是将axios安装到本地,执行结果如下:

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

总结

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值