这是我参与「第五届青训营 」伴学笔记创作活动的第 8 天
一.NodeJs的应用场景
1.前端工程化
例如打包构建工具:webpack,vite,parcel,esbuild等等。编译工具babeljs和typescript。且还处于一个不断上升的阶段。现在几乎处于无可替代的阶段。
2.Web服务端应用
nodejs做服务端开发学习门槛较低,且后续学习曲线较为平缓。而且经过很长时间的发展,已经形成丰富的社区生态和工具链,例如express、koa、egg、nest等等web框架,在npm上也由很多现成的工具可以使用。
使用node做服务端运行效率并不比Java、go这些常见的服务端语言差。而且在与前端结合同构渲染方面,nodejs有得天独厚的优势。
3.Electron跨端桌面应用
electron,tauri这些跨端框架,让前端开发者也能很容易的开发出桌面端应用。我们使用的飞书就是由electron开发的。
二.NodeJs运行时结构
1.异步I/O
nodejs执行io操作时,会在响应返回时恢复操作,而不是阻塞线程并占用额外内存去等待。
2.单线程
优点:不用考虑多线程状态同步问题,也就不需要锁;同时还能比较高效地利用系统资源;
缺点:阻塞会产生更多负面影响
解决办法:多进程或多线程
3.跨平台
Node.js跨平台 + JS无需编译环境 (+ Web跨平台 + 诊断工具跨平台)
开发成本低(大部分场景无需担心跨平台问题),整体学习成本低
三.编写node服务
第一个node服务器
const http = require('http')
const server = http.createServer((req,res) => {res.end('hello')})
const port = 3000
server.listen(port, () => {console.log(`listening on${port}`) })
使用node first.js后就可以在浏览器访问并可以看到返回结果hello
静态文件
引入fs模块
var fs = require("fs");
读取文件
param1: 读取文件路径
param2: 读取文件编码格式
param3: 回调函数 传入两个值,第一个是错误信息,第二个是读取的值
fs.readFile("./a.txt", "utf8", function (err, data) {
console.log(err, data);
});
写入文件
param1 操作的文件
param2 写入内容
param3 回调函数 只接受1个参数 即错误信息
fs.writeFile("./a.txt", "6666", function (err) {
console.log(err);
});