Node.js中常用的模块

Node.js 常用的模块

  1. url核心api有三个
  • parse:String --> Object
  • format:Objext -=> String
  • resolve: resolve(‘str’,‘str’) 拼接
  1. querystring

    1. 功能:Node.js中的字符
    2. 核心方法
      • 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=北京
      
  2. http
    核心方法

    1. get:获取网页内容 http.get(url/options,callback)
      request
    2. 小爬虫:
      爬虫?
      使用数据请求一段内容,然后将这段内容做数据清洗,最后在通过后端服务器发送到前台页面
      数据请求, 获得数据
      数据清洗 ( 工具 cheerio )
      安装 cheerio : $ cnpm i cheerio -S
      使用cheerio
      发送给前台
      反爬虫
  3. 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')
  1. fs 文件系统模块

    1. fs是Node.js中文件系统

    2. 功能: 操作文件或是目录

      文件:
      增: 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 )
            })
          }
       })
      
  2. 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)
  1. 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' )
})
  1. 前端异步流程工具
    传统:
    回调函数
    流行:

    1. 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' )
        })
    
    1. 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())
    
    1. Async函数
    2. Node.js nextTick setImmidate
    3. 第三方 async.js 库
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值