您的当前位置:首页正文

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

来源:要发发知识网

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: 
  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"
  },