简单的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 使用,闭包原理 等问题没有做展开,后期优化有需要再进行讨论 。文章来源:https://www.toymoban.com/news/detail-791566.html
补充了一部分模块化与包管理的基础介绍,这也并不完整,生产/开发环境,生产/开发依赖概念,异同,使用 命令,npm全局安装(npm root -g)与卸载(npm -r ),包管理,后期再进行内容更新。文章来源地址https://www.toymoban.com/news/detail-791566.html
到了这里,关于NODE笔记 1 http模块的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!