美文网首页
node.js 常用技术(一) 基础知识

node.js 常用技术(一) 基础知识

作者: Oo晨晨oO | 来源:发表于2017-11-25 20:33 被阅读12次

    node.js的一些基础技术, 老鸟不用看的

    事件监听

    1. 事件监听

    可以创建一个类继承events, 这个类就具有监听事件和发送事件的功能

    // 事件监听
    const EventEmitter = require('events')
    // 创造个可以监听事件的类(继承事件监听器)
    class Player extends EventEmitter {}
    
    let player = new Player()
    // 监听play事件
    player.once("play", (name) => {
      console.log(`开始播放: <${name}>`);
    })
    // 发送play事件
    player.emit("play", "黑猫警长")
    player.emit("play", "金刚葫芦娃")
    

    文件操作

    进行文件操作都要引入fs模块
    const fs = require('fs')

    1. 操作文件

    // 文件操作
    fs.stat('index.js', (error, stats) => {
      if (error) {
        console.log("error: ", error);
      } else {
        console.log(stats);
        // 看看是不是文件
        console.log(`文件: ${stats.isFile()}`); 
        // 看看是不是目录
        console.log(`目录: ${stats.isDirectory()}`);
      }
    })
    

    2. 创建目录

    // 创建目录
    fs.mkdir('logs', (error) => {
      if (error) {
        console.log("error: ", error);
      } else {
        console.log("目录创建成功...");
      }
    })
    

    3. 覆盖方式写入文件

    // 覆盖方式写入文件
    fs.writeFile('logs/hello.log', "hello~ \n", (error) => {
      if (error) {
        console.log("error: ", error);
      } else {
        console.log("输入成功");
      }
    })
    

    4. 添加方式写入文件

    // 添加方式写入文件
    fs.appendFile('logs/hello.log', "你好~", (error) => {
      if (error) {
        console.log("error: ", error);
      } else {
        console.log("输入成功");
      }
    })
    

    5. 读取文件

    fs.readFile('logs/hello.log', 'utf8', (error, data) => {
        if (error) {
          console.log("error: ", error);
        } else {
          console.log("输入成功: ", data);
        }
    })
    

    6. 读取目录

    // 读取目录
    fs.readdir('logs', (error, files) => {
      if (error) {
        console.log(error);
      } else {
        console.log(files);
      }
    })
    

    7. 更改文件名

    // 更改文件名
    fs.rename('logs/hello.log', 'logs/greeting.log', (error) => {
      if (error) {
        console.log(error);
      } else {
        console.log("更改成功");
      }
    })
    

    8. 删除含有文件的文件夹

    // 删除含有文件的文件夹
    fs.readdirSync('logs').map((file) => {
      fs.unlink(`logs/${file}`, (error) => {
        if (error) {
          console.log(error);
        } else {
          console.log("删除文件成功..");
        }
      })
    })
    fs.rmdir('logs', (error) => {
      if (error) {
        console.log(error);
      } else {
        console.log("删除目录成功...");
      }
    })
    

    9. 读取文件流(一块一块读取文件)

    // 读取文件流
    var fileReadStream = fs.createReadStream('data.json')
    
    var count = 0
    
    fileReadStream.once('data', (chunk) => {
      console.log("chunk: ", chunk.toString());
    })
    
    fileReadStream.on('data', (chunk) => {
      console.log("读取次数count: ", ++count);
      console.log("接收到: ", chunk.length);
    })
    
    fileReadStream.on('end', () => {
      console.log("结束");
    })
    
    fileReadStream.on('error', (error) => {
      console.log(error);
    })
    

    10. 写入文件流

    // 可写文件流
    var fileReadStream = fs.createReadStream('data.json')
    var fileWriteStream = fs.createWriteStream('data-1.json')
    
    var count = 0
    
    fileReadStream.once('data', (chunk) => {
      console.log("chunk: ", chunk.toString());
    })
    
    fileReadStream.on('data', (chunk) => {
      console.log("读取次数count: ", ++count);
      console.log("接收到: ", chunk.length);
    
      fileWriteStream.write(chunk)
    })
    
    fileReadStream.on('end', () => {
      console.log("结束");
    })
    
    fileReadStream.on('error', (error) => {
      console.log(error);
    })
    

    11. pipe

    // pipe管道流
    var fileReadStream = fs.createReadStream('data.json')
    var fileWriteStream = fs.createWriteStream('data-1.json')
    fileReadStream.pipe(fileWriteStream)
    
    // pipe链式用法
    const zlib = require('zlib')
    var fileReadStream = fs.createReadStream('data.json')
    var fileWriteStream = fs.createWriteStream('data-1.json.gz')
    
    fileWriteStream.on('pipe', (source) => {
      console.log("source: ", source);
    })
    
    fileReadStream
      .pipe(zlib.createGzip())
      .pipe(fileWriteStream)
    

    网络请求与响应

    1. request

    // request
    const http = require('http')
    
    let responseData = ''
    
    // 请求数据的参数
    let option = {
      protocol: 'http:',
      hostname: 'api.douban.com',
      port: '80',
      method: 'GET',
      path: '/v2/movie/top250',
    }
    
    let request = http.request(option, (response) => {
      console.log("response: ", response);
      response.setEncoding('utf8')
      response.on('data', (chunk) => {
        responseData += chunk
      })
      // 响应完毕之后解析响应数据
      response.on('end', () => {
        JSON.parse(responseData).subjects.map((item) => {
          console.log(item.title);
        })
      })
    })
    
    request.on('error', error => {
      console.log(error);
    })
    //关闭请求
    request.end()
    

    2. 设置服务器

    1. 创建一个server.js文件
    2. 然后写入响应请求的代码
    const http = require('http')
    // 创建服务器
    let server = http.createServer()
    // 监听request请求
    server.on('request', (request, response) => {
      // 设置响应头
      response.writeHead(200, {
        'Content-Type': 'text/html'
      })
      // 设置响应数据
      response.end(`<h1>Hello ~</h1>`)
    })
    // 设置监听端口
    server.listen(8080)
    
    1. 启动服务器
      node server.js
      或者在package.json的"scripts"里面写入启动脚本
        "start": "./node_modules/.bin/nodemon index.js",
        "server": "node server.js"
      },
    

    相关文章

      网友评论

          本文标题:node.js 常用技术(一) 基础知识

          本文链接:https://www.haomeiwen.com/subject/oaycbxtx.html