我在阅读NodeJS文档中读出的19个套路("NodeJS文档深度解析:掌握19个核心编程套路")
原创
一、回调函数的使用
Node.js 的核心在于异步编程,而回调函数是实现异步操作的关键。在Node.js中,几乎所有的API都是基于回调函数的。
function fetchData(callback) {
setTimeout(() => {
callback(null, '数据');
}, 1000);
}
fetchData((err, data) => {
if (err) {
console.error(err);
} else {
console.log(data);
}
});
二、Promise的运用
Promise 是一种更优雅的异步编程解决方案,它即一个异步操作的最终完成(或失利)及其最终值。
function fetchData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('数据');
}, 1000);
});
}
fetchData().then(data => {
console.log(data);
});
三、async/await 的使用
async/await 是 ES2017 引入的一种更简洁的异步编程方法,可以让异步代码看起来像同步代码。
async function fetchData() {
const data = await new Promise(resolve => {
setTimeout(() => {
resolve('数据');
}, 1000);
});
console.log(data);
}
fetchData();
四、模块化编程
Node.js 赞成模块化编程,通过 require 和 module.exports 来导入和导出模块。
// myModule.js
function myFunction() {
console.log('这是我的模块函数');
}
module.exports = myFunction;
// index.js
const myFunction = require('./myModule');
myFunction();
五、事件驱动
Node.js 内置了 events 模块,允许你轻松地创建和管理事件。
const EventEmitter = require('events');
const event = new EventEmitter();
event.on('some_event', () => {
console.log('事件触发');
});
event.emit('some_event');
六、流的使用
Node.js 提供了 stream 模块,用于处理数据的读写操作,特别是在处理大文件时非常有效。
const fs = require('fs');
const readStream = fs.createReadStream('input.txt');
const writeStream = fs.createWriteStream('output.txt');
readStream.on('data', function(chunk) {
console.log(chunk);
writeStream.write(chunk);
});
七、Buffer 的处理
Buffer 是 Node.js 中用于处理二进制数据的全局类。
const buffer = Buffer.from('Hello, World!');
console.log(buffer.toString());
八、文件系统操作
Node.js 的 fs 模块提供了多彩的文件操作API。
const fs = require('fs');
fs.writeFile('myFile.txt', 'Hello, World!', (err) => {
if (err) throw err;
console.log('文件已保存');
});
九、路径操作
Node.js 的 path 模块提供了处理文件路径的工具。
const path = require('path');
console.log(path.join(__dirname, 'myFile.txt'));
十、网络编程
Node.js 提供了 net 模块,用于创建服务器和客户端,实现网络通信。
const net = require('net');
const server = net.createServer((socket) => {
socket.write('Hello, client!');
socket.end();
});
server.listen(8080, () => {
console.log('Server is listening on port 8080');
});
十一、HTTP服务
Node.js 内置了 http 模块,用于创建HTTP服务器。
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello, World!');
});
server.listen(8080, () => {
console.log('HTTP server is listening on port 8080');
});
十二、NPM包管理
NPM 是 Node.js 的包管理器,用于管理和下载第三方模块。
npm install express
十三、命令行交互
Node.js 可以通过 process 模块与命令行进行交互。
console.log(process.argv);
十四、定时器函数
Node.js 提供了 setTimeout、setInterval 等定时器函数。
setTimeout(() => {
console.log('Hello, World!');
}, 2000);
十五、进程管理
Node.js 的 child_process 模块可以创建和控制子进程。
const { spawn } = require('child_process');
const child = spawn('ls', ['-l']);
child.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
});
十六、多线程处理
Node.js 通过 worker_threads 模块赞成多线程处理。
const { Worker, isMainThread, parentPort, workerData } = require('worker_threads');
if (isMainThread) {
const worker = new Worker(__filename, { workerData: [1, 2, 3] });
worker.on('message', (msg) => {
console.log(msg);
});
} else {
const result = workerData.reduce((acc, val) => acc + val, 0);
parentPort.postMessage(result);
}
十七、内存管理
Node.js 提供了 Buffer 类和 SharedArrayBuffer 类来处理内存。
const sharedBuffer = new SharedArrayBuffer(1024);
const buffer = new Uint8Array(sharedBuffer);
buffer[0] = 123;
console.log(buffer[0]);
十八、不正确处理
Node.js 中的不正确处理通常通过 try/catch 和回调函数中的不正确参数来实现。
try {
// 或许抛出不正确的代码
throw new Error('出错了');
} catch (err) {
console.error(err);
}
十九、单元测试
Node.js 赞成使用 mocha、jest 等测试框架进行单元测试。
// test.js
const assert = require('assert');
function add(a, b) {
return a + b;
}
describe('加法函数测试', () => {
it('1 加 1 应等于 2', () => {
assert.strictEqual(add(1, 1), 2);
});
});
以上是一篇基于HTML的文章,内容涵盖了Node.js文档中的19个核心编程套路。文章使用`