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

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

HTTP模块


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

//加载库中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流式传输


相关文章
|
1月前
|
缓存 JavaScript 安全
nodejs里面的http模块介绍和使用
综上所述,Node.js的http模块是构建Web服务的基础,其灵活性和强大功能,结合Node.js异步非阻塞的特点,为现代Web应用开发提供了坚实的基础。
101 62
|
2月前
|
JavaScript 前端开发
Vue、ElementUI配合Node、multiparty模块实现图片上传并反显_小demo
如何使用Vue和Element UI配合Node.js及multiparty模块实现图片上传并反显的功能,包括前端的Element UI组件配置和后端的Node.js服务端代码实现。
34 1
Vue、ElementUI配合Node、multiparty模块实现图片上传并反显_小demo
|
1月前
|
缓存 JSON JavaScript
Node.js模块系统
10月更文挑战第4天
34 2
|
1月前
|
JavaScript 应用服务中间件 Apache
Node.js Web 模块
10月更文挑战第7天
29 0
|
1月前
|
JavaScript 网络协议
Node.js 工具模块
10月更文挑战第7天
19 0
|
1月前
|
JavaScript 前端开发 应用服务中间件
Node.js Web 模块
Node.js Web 模块
|
3月前
|
存储 缓存 JSON
Node.js有哪些模块系统
【8月更文挑战第12天】Node.js有哪些模块系统
39 3
|
3月前
[译] Node 模块中的 peer dependencies 是什么?
[译] Node 模块中的 peer dependencies 是什么?
|
4月前
|
存储 JavaScript 安全
Node中的AsyncLocalStorage 使用问题之AsyncLocalStorage与node:async_hooks模块的问题如何解决
Node中的AsyncLocalStorage 使用问题之AsyncLocalStorage与node:async_hooks模块的问题如何解决
|
3月前
|
存储 JavaScript 前端开发
nodejs os模块
nodejs os模块
42 0