Node.js 常用的模块
- url核心api有三个
- parse:String --> Object
- format:Objext -=> String
- resolve: resolve(‘str’,‘str’) 拼接
-
querystring
- 功能:Node.js中的字符
- 核心方法
- parse:将String – > Object
- parse( str , arg1 , arg2)
str: 你要处理的字符
arg1: 分隔字符
arg2: 将 = 转化为 : , (这句话前提是 & 符号是提前被转化的)
var str = 'http://www.baidu.com:8080/001?a=1&b=2#hash=20' var obj = qs.parse( str,'?','&' )
- stringify:将Object -> String
- escape:将 中文字符 编码
- unescape:将 中文字符 解码
var charaStr = 'http://www.baidu.com/001?city=北京' var urlObj = url.parse(charaStr) var query = urlObj.query // city = 北京 console.log(qs.escape(query)) //city%3D%E5%8C%97%E4%BA%AC // unescape console.log(qs.unescape(qs.escape(query)))//ctty=北京
-
http
核心方法- get:获取网页内容 http.get(url/options,callback)
request - 小爬虫:
爬虫?
使用数据请求一段内容,然后将这段内容做数据清洗,最后在通过后端服务器发送到前台页面
数据请求, 获得数据
数据清洗 ( 工具 cheerio )
安装 cheerio :$ cnpm i cheerio -S
使用cheerio
发送给前台
反爬虫
- get:获取网页内容 http.get(url/options,callback)
-
events事件模块
var Events = require('events')
class MyEvents extends Events {}
var myEvents = new MyEvents ()
// console.log( myEvents )
// 声明事件
myEvents.on('aa',function(){
console.log( 'hello Node.js' )
})
// 事件的触发
myEvents.emit('aa')
-
fs 文件系统模块
-
fs是Node.js中文件系统
-
功能: 操作文件或是目录
文件:
增: writeFile(路径,内容 , 错误优先的回调)
删: unlink( 路径, 错误优先回调 )
改: appendFile(路径,添加修改的内容,字符编码(可以省略),回调函数(错误) )
查:readFile(路径,字符编码,回调函数( error, data ))
代码:var fs = require( 'fs' ) //增 fs.writeFile('./dist/1.txt','hello',function( error ) { if( error ) throw error }) // 改 fs.appendFile('./dist/1.txt','\n nihao~~','utf8',function( error ) { if( error ) throw error console.log('文件修改成功') }) // 查 fs.readFile( './dist/1.txt','utf8',function( error, data ) { if ( error ) throw error // console.log( data.toString() ) // 二进制数据 console.log( data ) console.log('文件读成功了') }) // 删 fs.unlink( './dist/1.txt', function( error ) { if( error ) throw error console.log( '文件删除成功' ) })
目录:
增: mkdir(创建的文目录,错误优先回调 )
删: fs.rmdir(path,callback) 这个方法只能删除空目录
改: rename(目录名,修改的目录名,错误优先回调 )
查: readdir(目录名,字符编码,function ( error,data ) )代码:
fs.readdir('./fs_dist','utf-8',function ( error,data ) { if( error ) throw error //console.log( data ) // 以文件名为元素构成的数组 for ( var i = 0 ; i < data.length; i ++ ){ fs.readFile( `./fs_dist/${data[i]}`,'utf8',function( error , content ) { if( error ) throw error console.log( content ) }) } })
-
-
stream 流: 减少内存消耗, 增加效率
可读的流:readeStream
可写的流:writeStream举例: 压缩包的创建
名词:
pipe --> 管道流
var fs = require('fs')
var zlib = require('zlib') // 创建压缩包
var readeStream = fs.createReadStream('./dist/1.txt')
var writeStream = fs.createWriteStream('./dist/1.txt.gz')
var gzip = zlib.createGzip() // 空压缩包
readeStream
.pipe(gzip)
.pipe(writeStream)
- Node.js原生路由
简单的说,路由是根据不同的 url 地址展示不同的内容或页面
var http = require( 'http' )
var fs = require( 'fs' )
http.createServer( function ( req, res ) {
switch ( req.url ) {
case '/home':
res.write('home')
res.end()
break;
case '/mine':
res.write('mine')
res.end()
break;
case '/login':
fs.readFile( './static/login.html',function ( error , data ) {
if ( error ) throw error
res.write( data )
res.end()
})
break;
case '/fulian.jpg':
fs.readFile( './static/fulian.jpg','binary',function( error , data ) {
if( error ) throw error
res.write( data, 'binary' )
res.end()
})
break;
default:
break;
}
}).listen( 8009, 'localhost', function () {
console.log( '服务器运行在: http://localhost:8009' )
})
-
前端异步流程工具
传统:
回调函数
流行:- Promise
const p1 = new Promise ( function ( resolve, reject ) { resolve( '任务一' ) }) .then ( function ( data ) { console.log( data ) }) const p2 = new Promise ( function ( resolve, reject ) { setTimeout( function () { resolve( '任务二' ) },1000) }) .then ( function ( data ) { console.log( data ) }) console.log( '主线程任务 ') // Promise // .all([p1,p2]) // 先执行all中所有任务, 执行完成之后再去执行后面的任务 // .then( data => { // console.log( '任务3' ) // }) Promise .race([p1,p2]) // race 谁快输出谁 .then( data => { console.log( '任务3' ) })
- Generator函数
概念, 在function 关键字后面写一个* ,表示一个generator函数
generator通过 yield 关键字来定义任务
function* p1 () { yield '任务1'; yield '任务2'; yield '任务3'; yield '任务4'; yield '任务5'; yield function* p2() { yield '任务7' } return '任务6' } var p = p1() console.log(p.next()) console.log(p.next()) console.log(p.next()) console.log(p.next()) console.log(p.next()) console.log(p.next())
- Async函数
- Node.js nextTick setImmidate
- 第三方 async.js 库