Node(六)其餘經常使用內置模塊

HTTP模塊

跨域:用代理的方式跨域,打個比方,我本身有一個前端,一個後臺,小明有一個後臺。個人前端須要訪問小明的後臺就是所謂的跨域,可是若是用我本身的後臺使用http請求訪問小明的後臺,就不用跨域,因而我就能夠經過本身的前端用ajax訪問本身的後端完成數據請求。·javascript

建立服務器:經過ajax的post傳至data中html

//加載庫中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');java

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');ajax

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');post

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流式傳輸
相關文章
相關標籤/搜索