Why:为什么要学 Node.js - Node.js 的应用场景 What:Node.js 是什么 - Node.js 运行时结构 How:怎样编写 Node.js 代码 - Http Server 延伸话题:贡献 Node.js 代码、编译 Node.js、诊断 / 追踪、WASM,NAPI
结构:
特点:
nvm
。多版本管理。
nvm4w
或是官方安装包。
NVM_NODEJS_ORG_MRROR=https://npmmirror.com/mirrors/node nvm install 16
返回 JSON 的 Server 示例:
const http = require('http');
const port = 3000;
const server = http.createServer((req, res) => {
const bufs = [];
req.on('data', (data) => bufs.push(data));
req.on('end', () => {
// bufs
const buf = Buffer.concat(bufs).toString('utf8');
let ret, msg;
try {
ret = JSON.parse(buf);
msg = ret.msg || 'Hello';
} catch (err) {
msg = 'Hello';
}
const responseJson = {
msg: `receive: ${msg}`
};
res.setHeader('Content-Type', 'application/json');
res.end(JSON.stringify(responseJson));
})
});
server.listen(port, () => {
console.log('listening on port: ' + port);
});
简单的静态文件服务:
const http = require('http');
const fs = require('fs');
const path = require('path');
const url = require('url');
const folderPath = path.resolve(__dirname, './static');
const port = 3000;
const server = http.createServer((req, res) => {
const info = url.parse(req.url);
const filepath = path.resolve(folderPath, './'+ info.path);
const filestream = fs.createReadStream(filepath);
filestream.pipe(res);
});
server.listen(port, () => {
console.log('listening on port: ' + port);
});
与高性能、可靠的服务相比,还差什么?
SSR (server side rendering) 有什么特点?
SSR 难点:
V8 Inspector:开箱即用、特性丰富强大、与前端开发一致、跨平台
场景:
部署要解决的问题:
容器环境:
快速了解 Node.js 代码:
好处:
难点:
为什么要学习编译 Node.js:
贡献代码的第一步:
Node.js (因为 V8)是执行 WASM 代码的天然容器,和浏览器 WASM 是同一运行时,同时 Node.js 支持 WASI。
NAPI 执行 C 接口的代码 (C/C++/Rust…),同时能保留原生代码的性能。
不同编程语言间通信的一种方案。