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. 设置服务器
- 创建一个server.js文件
- 然后写入响应请求的代码
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)
- 启动服务器
node server.js
或者在package.json的"scripts"
里面写入启动脚本
"start": "./node_modules/.bin/nodemon index.js",
"server": "node server.js"
},
网友评论