Node(六)其他常用内置模块

HTTP模块

跨域:用代理的方式跨域,打个比方,我自己有一个前端,一个后台,小明有一个后台。我的前端需要访问小明的后台就是所谓的跨域,但是如果用我自己的后台使用http请求访问小明的后台,就不用跨域,于是我就可以通过自己的前端用ajax访问自己的后端完成数据请求。·

创建服务器:通过ajax的post传至data中

//加载库中http.js,加载进入赋值给变量http,是一个对象
var reg = require("http");
//req就是客户端向服务器端请求的数据
//res就服务器项客户端发送的数据
//reg.createServer创建服务
var server = reg.createServer(function (req, res) {
    var data = "";
//req.on("data")是客户端请求的数据正在接收中的事件
    req.on("data", function (d) {
        data += d;
    });
//req.on("end")是客户端请求的数据接收完毕
    req.on("end", function () {
        var obj = JSON.parse(data);
//头文件,最后的*表示允许所有域访问
        res.writeHead(200, {
            "Content-Type": "text/plain",
            "Access-Control-Allow-Origin": "*"
        });
        res.write(JSON.stringify(obj));
        res.end();
    });
});
//侦听事件
server.listen(1024, "localhost", function () {
    console.log("注册服务开启,开始侦听");
});

爬虫 获取数据:

//引入http模块
const http = require('http');
//发起服务器短的请求
const fs = require('fs');
http.get('http://localhost/test/1.html', (res) => {
    const {
        statusCode
    } = res;//状态码
    const contentType = res.headers['content-type'];//请求的类型
    let error;
    if (statusCode !== 200) {
        error = new Error('状态码错误');
    }
    if (error) {
        console.log(error.message);
        res.resume();// 清除请求缓存
        return;
    }
// 数据处理
    res.setEncoding('utf8');//设置数据的编码格式
    let data = '';
    res.on('data', function (d) {
        data += d;//接收分段信息
    });
    res.on('end', () => {
        // console.log(data);
//接收后写入至本地文件
        fs.writeFile('./test1.html', data, 'utf8', (err) => {
            if (err) {
                throw err
            }
            console.log('下载完成');
        })
    });
}).on('error', (e) => {
    console.error(`Got error: ${e.message}`);//出错返回信息
});

URL模块

引入:const url = require('url');

let urlstring='http://www.baidu.com:8080/home/login/test?name=wy&ps=wanger#hash'
const myURL = url.parse(urlstring,true);
//parse 将url字符串变成url格式的对象
 let obj={
	protocol: 'http:',
	slashes: true,
	auth: null,
	host: 'www.baidu.com:8080',
	port: '8080',
	hostname: 'www.baidu.com',
	hash: '#hash',
	search: '?name=wy&ps=wanger',
	query: { name: 'wy', ps: 'wanger' },
	pathname: '/home/login/test',
	path: '/home/login/test?name=wy&ps=wanger',
	href:'http://www.baidu.com:8080/home/login/test?name=wy&ps=wanger#hash' 
}
let result=url.format(obj)
//format将url对象变成url格式的字符

QueryString模块

引入:let qs=require('querystring');

parse(query,"%",'@')//将字符串转化为对象
qs.stringify(obj,'@',"!")//将对象转为字符
qs.escape(query)//将query 中的汉字或者特殊字符进行编码
qs.unescape(code)//将query 中的汉字或者特殊字符进行解码

Path模块

引入:const path=require('path');

path.join()//实现路径拼接
path.join(__dirname,'./file.js')//__dirname是当前文件的文件夹,可以拼接多个,以逗号隔开:
path.join(__dirname,'../','./hw','mail.js')
path.basename('path')//当前文件名
path.dirname('path')//当前文件夹名
path.extname('path')//拓展名

Events模块

引入:const Event = require('events');

首先要进行以下代码(与其他模块不同)

class MyEmitter extends Event {}

// 类的继承

const myEmitter = new MyEmitter();

// 实例化对象 new对象

// 添加对象监听

let callback=(food,food2)=>{

    console.log('eat'+food+food2);

}

然后,愉快的调用

myEmitter.on('eat',callback);//eat是事件名
myEmitter.emit('eat','aaaaa','bbbb')//可以传参
myEmitter.removeAllListeners()//移除所有的事件
myEmitter.removeListener('eat',callback);//移除某个事件

Stream流

首先需要引入:const fs=require('fs');

let read=fs.createReadStream('./events.js')// 创建可读的流
let  write=fs.createWriteStream('./events3.js')// 创建可写的流

读取Stream流并复制图片的例子 

const fs = require('fs');
let read = fs.createReadStream('./file/test1.png');//新建可读Stream流文件
let data = '';//外置容器加载数据
read.setEncoding('binary');//转换成图片的格式,默认utf8
read.on('data',(d)=>{
    data+=d;//每次流式传输数据
});
read.on('end',()=>{
    fs.writeFileSync('./file/test2.png',data,'binary');//将数据写入至文件
});

 

 读取Stream流并以可写流方式复制图片的例子 

const fs = require('fs');
let read = fs.createReadStream('./file/test1.png');//新建可读Stream流文件
let change = fs.createWriteStream('./file/test3.png','binary');//新建可写Stream流文件
read.setEncoding('binary');//转换格式(图片)
read.on('data',(d)=>{
    change.write(d);//流式存储,无需等到数据加载完,一边加载一边存储
});

读取加写入配合pipe完成复制

//达到文件流式复制
const fs=require('fs')
let read = fs.createReadStream('./file/test1.png', 'binary'); //新建可读Stream流文件
let change = fs.createWriteStream('./file/test4.png', 'binary'); //新建可写Stream流文件
read.pipe(change);//将可读流传输至可写流文件中

Zlib模块

引入:const zip = require('zlib');和

const fs = require('fs');

const gzip = zip.createGzip();//新建文件压缩
let input = fs.ReadStream('./test1.png');//传入的文件
let output = fs.WriteStream('./test1.gzip');//将压缩好的文件生成
input.pipe(gzip).pipe(output);//pipe流式传输

 

posted @ 2018-11-28 16:28  阿宇的编程之旅  阅读(250)  评论(0编辑  收藏  举报