Stream 流
* 什么是流? Node中为什么要有流这个概念 ? 使用场景?
* 流指的是数据流,指的是数据是分片传输。
* 数据可以实现非阻塞。
* gulp 【 流式操作 】

* 案例: 打包压缩包
* 流程:
* 1. 读取文件
* 2. 创建压缩包
* 3. 将读取的数据流写入压缩包
* 4. 输出压缩包

const fs = require ( 'fs' ) //引入内置模块
const zlib = require ( 'zlib' ) //内置模块
const inp = fs.createReadStream( './文件名.tet' ) //用fs 读取文件
const gzip = zlib.createGzip() //创建压缩包
const out = fs.createWriteStream( './文件名.tet.gz' )

inp
.pipe(gzip)
.pipe(outp)

Node,js常用内置模块
1.读取文件:fs
读取文件都是二进制流:①:Buffer ②:binary //二进制2中名称
const fs = require( 'fs' )
fs.readFile('./yyb.txt',( error, docs ) => {
console.log( docs.toString() ) //toString() 转成二进制文件 中文
})
fs.readFile('./yyb.txt','utf8',( error, docs ) => { //utf8 转成二进制文件 中文
console.log( docs )
})

2.压缩文件:zlib
const zlib = require ( 'zlib' )

3.http模块
①http.get
②http.request

数据接口地址:‘http://api.k780.com/app=weather.city&cou=1&appkey=43880
&sign=6a31f4fe1408d69bb0417b046eeae5b6&format=json’
const http = require( 'http' )

http.get('数据接口地址', (res) => {
const { statusCode } = res; // 获取请求状态码 200 301 302 303 304 404 500...
const contentType = res.headers['content-type']; // 获取请求类型数据类型
// json数据的content-type 'content-type': 'application/json'
let error;
if (statusCode !== 200) { // 如果状态码不是200 ,输出报错信息
error = new Error('Request Failed.\n' +
`Status Code: ${statusCode}`);
} else if (!/^application\/json/.test(contentType)) { //验证是否是josn格式
error = new Error('Invalid content-type.\n' +
`Expected application/json but received ${contentType}`);
}
if (error) { // 如果报错了,将报错信息存入日志
console.error(error.message);
// consume response data to free up memory
res.resume();
return;
}
res.setEncoding('utf8'); // 字符编码
let rawData = '';
res.on('data', (chunk) => { rawData += chunk; }); // 通过data事件拼接数据流
res.on('end', () => { // 获取数据结束了
try { // 高级编程语法 捕获错误信息
console.log( rawData );
} catch (e) {
console.error(e.message);
}
});
}).on('error', (e) => {
console.error(`Got error: ${e.message}`);
});

后端服务器:
①:web服务器 静态服务器
②:api服务器 暴露接口

* 请求头部报文
1. general //请求基本信息
2. response Headers //响应头
3. request Headers //请求头
4. 携带参数
- query string paramters //get请求
- form data //post 请求

const http = require ( 'http' )
const host= 'localhost' //主机名
const port = 8000 //端口

http.createServer( ( request , response) =>{
//response.writeHead( 状态码 , 请求头 )
response.writeHead( 200 , {
'Content-type': 'text/html;charset=utf8' //转化成中文
})
response.write( ' 这是使用node创建的一个静态服务器' ) //往前端发送数据
response.end() // 告诉前端信息已经结束了
}).listen( port , host , () = >{
console.log( `The server is running at: http://${ host }:${ port }` )
})

http模块:爬虫
* 去某一个网站爬取一段数据 -> 数据清洗 -> 后端服务器 -> 发送前端 -> 渲染数据
* 不是所有网站都可以爬取
* 反爬虫 //文字里插入图片等方法
* 爬虫: 后端渲染的网站
const http = require ( 'http' )
const cheerio = require( 'cheerio' ) //爬取数据
const options = {
hostname: '域名',
port: 80, //端口
path: '域名后面的路径',
method: 'GET',
headers: {
Accept: ' ',
'Accept-Encoding': ' ', //设置返回的编码方式
'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
'Cache-Control':' no-cache',
Cookie: ' ',
Host: ' ',
Pragma: 'no-cache',
'Proxy-Connection': 'keep-alive',
Referer: ' ',
'Upgrade-Insecure-Requests': 1,
'User-Agent':' ',
'Content-Type': ' ',
'Content-Length': 0
}
}

http.get( options, (res) => {
const { statusCode } = res; // 获取请求状态码 200 301 302 303 304 404 500
const contentType = res.headers['content-type']; // 获取请求类型数据类型
res.setEncoding('utf8'); // 字符编码
let rawData = '';
res.on('data', (chunk) => { rawData += chunk; }); // 通过data事件拼接数据流
res.on('end', () => { // 获取数据结束了
try { // 高级编程语法 捕获错误信息
// console.log( rawData )
const $ = cheerio.load( rawData ) //爬取到的数据
$(' this').each(function (index,item) {
console.log( $( this ) ) //输出数据
})
} catch (e) {
console.error(e.message);
}
});
}).on('error', (e) => {
console.error(`Got error: ${e.message}`);
});

4.event模块
Node.js中 事件的发布 + 事件的订阅 表示一个任务的执行。

const Events = require( 'events' )
const fs = require( 'fs' )
const http= require( 'http' )
const host = 'localhost'
const port = 3000

class myEvent extends Events {} //类的继承
const myevent=new myEvent() //实例化得到的一个实例

//事件的发布
// myevent.on(事件名称,事件的回调函数)
myevent.on('aa',function () { // 书写任务 ‘aa’ 任务名
// 任务: 将文件.txt中的内容发送前端
http.createServer( ( req,res ) => {
res.writeHead( 200,{
'Content-Type': 'text/html;charset=utf8'
})
// 1
fs.readFile('./yyb.txt','utf8',( error,docs ) => { // error作为第一个参数的回调函数,我们叫做错误优先的回调函数
res.write(`<h3> ${ docs } </h3>`)
res.end()
})
// 2
// why? 错误?
// res.end() 上面回调函数,不在主线程在任务队列,代码会先执行2 在执行1,所以 res.end()要放上面

}).listen( port,host,() => {
console.log( `服务器运行在: http://${ host }:${ port }` )
})
})

// 事件的订阅

myevent.emit( 'aa' ) // ’aa‘事件的名称

5.后端 api服务器
Node.js中api服务器的创建,我们使用一个第三方库 express
后端解决跨域问题:
1. 设置请求头
2. 使用中间件
第三方的包 cors
举例:
const express = require( 'express' )
const app = express() //得到一个app对象
const port =3000
const host = 'localhost'
const cors = require( ' cors' )
//解决跨域第一种方法创建接口,设置一次即可。
app.use(cors({
"origin": " * " ,
"methods": "GET,HEAD,PUT,PATCH,POST,DELETE",
"preflightContinue": false,
"optionsSuccessStatus": 200
})

app.get( ' /person' , (reg , res , next) =>{ // 回调函数我们称之为:中间件具有 特定功能的一个函数
res.setHeader('Access-Control-Allow-Origin', '*'); // 解决跨域第二种解决办法 设置请求头跨域,麻烦,每个请求都得设置
res.json({
id : 1 ,
name : ' 张三' ,
age : 100
})
})
// 创建api服务器,并监听这个服务器
app.listen( port , host , () =>{
console.log( `The server is running at : http://${ host }:${ port }` )
})

6.方向代理
1. 后端请求数据
2. 将数据发送给前端 api服务器 express

const request = require( 'request' )
const express = require( ' express' )
const host = 'localhost'
const port = 3000
const app = express()
const url = 'https://m.lagou.com/listmore.json'

//创建接口
app.get( '/position' , ( req , res , next ) =>{
res.setHeader('Access-Control-Allow-Origin', '*');
// 数据请求
request( url , (error , response , body) =>{
res.json( JSON.parse( body ) )
})
})
app.listen(port , host, () => {
console.log( `The server is running at: http://${ host }:${ port }` )
})

转载于:https://www.cnblogs.com/zhouying-01/p/11196986.html

node.js常见的模块相关推荐

  1. node.js中模块_在Node.js中需要模块:您需要知道的一切

    node.js中模块 by Samer Buna 通过Samer Buna 在Node.js中需要模块:您需要知道的一切 (Requiring modules in Node.js: Everythi ...

  2. 浅析 Node.js 的 vm 模块以及运行不信任代码

    为什么80%的码农都做不了架构师?>>>    在一些系统中,我们希望给用户提供插入自定义逻辑的能力,除了 RPC 和 REST 之外,运行客户提供的代码也是比较常用的方法,好处是可 ...

  3. Node.js 初识 fs 模块

    fs 模块是文件操作的封装,它提供了文件的读取.写入.更名.删除.遍历目录.链接等 Unix 文件系统操作.与其他模块不同的是,fs 模块中所有的操作都提供了 同步 和 异步 两个版本,比如读取文件内 ...

  4. 开场 Live,分享点干货——「深入了解 Node.js 包与模块机制」

    先放上 Live 地址: www.zhihu.com/lives/84274- 本次 Live 将深入剖析 Node.js 包与模块机制,包括且不限于解析 Node.js 源码.社区规范等.本人认为这 ...

  5. php node 目录,node.js基于fs模块对系统文件及目录进行读写操作的方法详解

    本文主要介绍了node.js基于fs模块对系统文件及目录进行读写操作的方法,结合实例形式分析了nodejs使用fs模块针对文件与目录的读写.创建.删除等相关操作技巧,需要的朋友可以参考下. 如果要用这 ...

  6. Node.js web应用模块之forever

    javascript 一统江湖的势头越来越猛,越来越重的前端,不得不实施前后端分离,angular.js 成功把前端javascript抽象成了一个复杂的MVC框架,注意,它是一个框架,可不是普普通通 ...

  7. Node.js web应用模块之Supervisor

    在开发或调试Node.js应用程序的时候,当你修改js文件后,总是要按下CTRL+C终止程序,然后再重新启动,即使是修改一点小小的参数,也 总是要不断地重复这几个很烦人的操作.这是因为Node.js ...

  8. node.js中ws模块创建服务端和客户端,网页WebSocket客户端

    首先下载websocket模块,命令行输入 npm install ws 1.node.js中ws模块创建服务端 // 加载node上websocket模块 ws; var ws = require( ...

  9. Node.js学习笔记——模块加载机制及npm指令详解

    文章目录 二.模块化 1.模块化的基本概念 2.Node.js 中的模块化 Node.js 中模块的分类 加载模块 Node.js 中的模块作用域 向外共享模块作用域中的成员 Node.js 中的模块 ...

最新文章

  1. 创建图像 php,详解php创建图像具体步骤
  2. 微生物常见20种培养基配方
  3. Pydev 找不到新安装的 Python egg 解决方法
  4. python实现流媒体传输_基于OpenCV的网络实时视频流传输的实现
  5. 深入解读无服务器架构下的数据库
  6. 网络编程BaseIO介绍
  7. 第 18 章 访问者模式
  8. 区块链+电子档案解决方案
  9. Python黑客绝技04:Python基础知识2
  10. 值得收藏:一份非常完整的MySQL规范
  11. Acwing语法基础课第六次课-循环判断练习题,连续整数相加,约数,PUM,余数,六个奇数,乘法表,
  12. Wxpython pannel切换
  13. mysql分组查询学生平均年龄_8.21MySQL(四)基本查询语句及方法、连表、子查询...
  14. 资源整理 IC/FPGA
  15. 案例:淘宝用户行为数据分析(SQL实现)
  16. jetson-NX刷机
  17. 【小强推歌】---Shania Twain 经典歌曲收藏
  18. 拼多多API接口大全
  19. python+Django搭建web服务器
  20. vba中如何使用函数counta

热门文章

  1. HDU 2112 HDU Today (dijkstar + map)
  2. FCKeditor图片上传 进度条不动
  3. 企业被黑客攻击,“怼回去”合法吗?
  4. lucene索引的删除和更新
  5. hdu2159(二维完全背包)
  6. 字节序及字节排序函数
  7. css实现透明度(兼容IE6、火狐等)
  8. 典型的Linux系统启动需要完成的服务
  9. oracle查找外键表
  10. Jean Hsu:当女软件工程师的那些好处