美文网首页
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 常用技术(一) 基础知识

    node.js的一些基础技术, 老鸟不用看的 事件监听 1. 事件监听 可以创建一个类继承events, 这个类就...

  • 9.技术选型和技术点介绍

    Chapter: 9.技术选型和技术点介绍(关键重要) 补充基础知识的介绍 NodeJS Node.js是一个后端...

  • 01-npm基本使用

    Node.js基础知识 npm命令基本使用 概念 什么是NPM(node.js package managemen...

  • node.js 基础

    基础知识 初识node.js 认识node.js 诞生 2008年 Ryan Dahl 应用: 知乎,网易,pa...

  • Node.js<六>

    Node.js 常用工具 util 是一个Node.js 核心模块,提供常用函数的集合,用于弥补核心JavaScr...

  • node.js(十五)

    Node.js 常用工具util 是一个Node.js 核心模块,提供常用函数的集合,用于弥补核心JavaScri...

  • 2019-07-11

    C/C++程序员的技术进阶路线规划 目标 秋招进腾讯 技术 1,计算机基础知识 (1)常用数据结构与算法 (2)操...

  • Ajax总结

    本文主要总结整理Ajax的一些常用的基础知识,适合初学者。 一、Ajax简介、优劣势、应用场景以及技术 Ajax简...

  • node.js 常用技术(二) 测试相关

    node.js的测试是非常重要的, 通常要写一个函数就要写出其对应的测试通常, node.js测试 可以使用moc...

  • keystonejs入门教程之环境搭建

    基础环境 Node.js 0.10+ 和MongoDB v2.4+; 基础知识 javascript,nodejs...

网友评论

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

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