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流式傳輸