Node.js 与前端开发实战 | 青训营笔记
这是我参与「第四届青训营 」笔记创作活动的的第11天
Nodejs并非是一个框架,是集成了Google V8 Javascript引擎、事件驱动和底层I/O API,并且可使用JS语言开发服务端应用的运行环境
1.node应用
- 前端工程化:webpack等,相比其他语言的学习成本低
- web服务端应用:SSR、npm
- 跨桌面应用的场景
2.Node.js运行时结构
底层有C++ js等编写的 V8:js运行环境
- 特点:异步I/O,不阻塞线程
- 单线程:不考虑多线程状态同步,
- 跨平台:js无需编译环境
3.采用node编写HTTP Server
安装:使用nvm,可以管理多个版本的npm。这在实际中非常有用,当我们在开发中遇到版本不兼容时可能会删除当前版本去安装需要的版本,这样只要一变化就需要重新安装。使用nvm这种工具的话可以动态切换不同的版本,有效地管理了不同版本,这样在切换版本的时候之间切换就可以
require(model_name)可以导入相关模块
const http=reauire('http')
创建server
const server=http.createServer(()=>{});
监听端口
const port=8080;
http.listen(port,()=>{})
获取用户传来的数据
const server=http.createServer((req,res)=>{;
const dataset=[];
req.on('data',(da)=>{ dataset.push(da)});
req.on('end',()=>{
const result=Buffer.concat(dataset).toString(utf8);
let msg='this is result';
try{
msg=JSON.parse(result).msg;
}
catch(err){console.log("err");}
})
const reesponse={msg:"response"};
res.setHeader('ContenType','application/json');
res.end(JSON.stringify(response));
})
请求服务端数据
http.request(url,{method,headers},()=>{})
SSR
- 避免重复编写代码
- 首屏渲染更快
- 有利于SEO
- 前端要考虑后端的运行时逻辑:比如支持什么样的请求方式
- 服务器压力大
调试
- 打印日志内容
- 打断点
- 性能分析
事件执行顺序
- 首先执行同步代码,将同步代码放入执行栈中,异步代码放在任务队列中;
- 当执行栈中没有任务要执行时,就会去执行异步队列中的任务;
- 异步队列中分为微任务和宏任务,微任务优先级高,因此如果任务队列中有微任务,就把微任务放入执行栈中执行;
- 执行完后再执行异步队列中的宏任务-----然后继续在该宏任务中查找同步、异步任务,一次循环,完成了一个事件循环