node.js 基础api01

149 阅读2分钟

1node文件读取

// 03-fs.js

const fs = require('fs');

// 同步调用

const data = fs.readFileSync('./conf.js'); //代码会阻塞在这里

console.log(data);

// 异步调用

fs.readFile('./conf.js', (err, data) => {

if (err) throw err;

console.log(data);

})

// promisify

const {promisify} = require('util')

const readFile = promisify(fs.readFile)

readFile('./conf.js').then(data=>console.log(data))

Buffffer缓冲区

读取数据类型为Buffffer

Buffffer - 用于在 TCP 流、文件系统操作、以及其他上下文中与八位字节流进行交互。 八位字节组

成的数组,可以有效的在JS中存储二进制数据

// fs Promises API node v10

const fsp = require("fs").promises;

fsp

.readFile("./confs.js")

.then(data => console.log(data))

.catch(err => console.log(err));

// async/await

(async () => {

const fs = require('fs')

const { promisify } = require('util') //这个方法可以将node的api转换成promise风格

const readFile = promisify(fs.readFile) 

const data = await readFile('./index.html')

console.log('data',data)

})()

// 引用方式

Buffer.from(data).toString('utf-8')

Buffffer缓冲区

读取数据类型为Buffffer

Buffffer - 用于在 TCP 流、文件系统操作、以及其他上下文中与八位字节流进行交互。 八位字节组成的数组,可以有效的在JS中存储二进制数据

// 04-buffer.js

// 创建一个长度为10字节以0填充的Buffer

const buf1 = Buffer.alloc(10);

console.log(buf1);

// 创建一个Buffer包含ascii.

// ascii 查询 http://ascii.911cha.com/

const buf2 = Buffer.from('a')

console.log(buf2,buf2.toString())

// 创建Buffer包含UTF-8字节

// UFT-8:一种变长的编码方案,使用 1~6 个字节来存储;

// UFT-32:一种固定长度的编码方案,不管字符编号大小,始终使用 4 个字节来存储;

// UTF-16:介于 UTF-8 和 UTF-32 之间,使用 2 个或者 4 个字节来存储,长度既固定又可变。

const buf3 = Buffer.from('Buffer创建方法');

console.log(buf3);

// 写入Buffer数据

buf1.write('hello');

console.log(buf1);

// 读取Buffer数据

console.log(buf3.toString());

// 合并Buffer

const buf4 = Buffer.concat([buf1, buf3]);

Buffffer类似数组,所以很多数组方法它都有



http服务

创建一个http服务器

const http = require('http');

const server = http.createServer((request, response) => {

console.log('there is a request');

response.end('a response from server');

});

server.listen(3000);


Stream流

stream - 是用于与node中流数据交互的接口

//二进制友好,图片操作

const fs = require('fs')

const rs2 = fs.createReadStream('./01.jpg')  //读取

const ws2 = fs.createWriteStream('./02.jpg') //写入

rs2.pipe(ws2); //连接

//响应图片请求,05-http.js

const {url, method, headers} = request;

else if (method === 'GET' && headers.accept.indexOf('image/*') !== -1) {

fs.createReadStream('.'+url).pipe(response);

}

Accept代表发送端(客户端)希望接受的数据类型。 比如:Accept:text/xml; 代表客户端希望

接受的数据类型是xml类型。

Content-Type代表发送端(客户端|服务器)发送的实体数据的数据类型。 比如:Content

Type:text/html; 代表发送端发送的数据格式是html。

二者合起来, Accept:text/xml; Content-Type:text/html ,即代表希望接受的数据类型是xml格

式,本次请求发送的数据的数据格式是html。