promisify

由于历史原因, node很多接口是不支持promise的, 通常使用回调函数的做法, 我们可以使用promisify来使接口支持promise

  1. (async()=>{
  2. const fs = require('fs')
  3. const { promisify } = require('util')
  4. const readFile = promisify(rs.readFile)
  5. const data = await readFile('./index.html')
  6. console.log(data)
  7. })()

node v10以后也提供promise接口了

  1. // fs promise api node v10
  2. const fsp = require('fs').promises
  3. fsp.readFile('./index.html').then(data=>{
  4. console.log(data)
  5. })

stream

  1. const fs = require('fs')
  2. const rs = fs.createReadStream('./xin.jpeg')
  3. const ws = fs.createWriteStream('./hui.jpeg')
  4. rs.pipe(ws)
  1. const http = require('http')
  2. const fs = require('fs')
  3. const server = http.createServer((request, response) => {
  4. const { url, method, headers } = request
  5. if (method === 'GET' && headers.accept.indexOf('image/*')) {
  6. fs.createReadStream('.' + url).pipe(response)
  7. }
  8. })
  9. server.listen(9000)

为什么不用readFile?
因为 readFile 会占用大量内存, createReadStream使用流处理文件, 占用内存比较小