深入 Node.js 技术栈 学习笔记
date
Jul 9, 2023
slug
learn-nodejs
status
Published
tags
Node.js
summary
type
Post
exports 和 module.exports
- 默认情况下,
exports
是module.exports
的引用
- 直接对 exports 赋值会断开两者的关联
- 下面两种用法的效果相同
path.join 和 path.resolve
join 简单的路径拼接
resolve 以
/
为根目录,若传入相对路径,会自动在前面加上当前目录形成绝对路径webpack alias
为 import 和 export 创建别名
使用 npx 执行局部命令
全局安装webpack 5.1.3 项目安装webpack 3.6.0
webpack --version
// 5.1.3如何执行项目文件夹内的webpack?
npx webpack --version
原理:到当前目录的node_modules/.bin
查找对应命令浏览器中的事件循环:事件队列、宏任务微任务
做题前先画个图
宏任务:ajax、setTimeout、setInterval、DOM监听、UI Rendering
微任务:Promise.then、Mutation Observer API、queueMicrotask()
async 和 await 如何处理?
将 await 执行的代码,看作包裹在
(resolve, reject) => {}
中的代码
将 await 后的下一条语句,看作 then(res => {})
中的代码执行顺序:script 优先,执行任何一个宏任务之前,先执行完微任务队列中的
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F4a4bfb10-502b-470f-8793-bf729ee1d77f%2FUntitled.jpeg?table=block&id=3639f21c-8464-4499-b115-f437d4e4d1bf&cache=v2)
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fab2411f3-6e60-429a-9249-4e05364872ae%2FUntitled.jpeg?table=block&id=7640647d-52fc-4c5a-b067-bb491f7f1e76&cache=v2)
两道面试题讲解:8.Buffer和浏览器的时间循环 2:26:28
Node 中的事件循环
- Node 与浏览器的差异
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F4509990c-5e1c-4fb7-a11a-e32edaea18b0%2FUntitled.jpeg?table=block&id=b6a900ed-cd48-4bda-a3da-c8132b857e86&cache=v2)
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fd4bf53ba-3e51-435b-80c7-2c544f8c159c%2FUntitled.jpeg?table=block&id=bc8c97d1-6276-4c49-ab92-8fbd46540c3c&cache=v2)
宏任务:setTimeout、setInterval、IO事件、setImmediate、close事件
微任务:Promise.then、process.nextTick(单独的一个队列)、queueMicrotask
一次事件循环称为一次 tick
![notion image](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Fcccabbd2-071a-499d-afc2-cc3982cb2c37%2FUntitled.png?table=block&id=698c18c4-5fd4-48d5-8c1f-453c583df6e6&cache=v2)
面试题讲解:1:00:13
项目开发习惯
路由与中间件
- 目录结构
user.router.js
只负责注册接口
user.controller.js
编写具体的处理逻辑,可以编写类,new
一个来导出
user.service.js
中间操作太长,抽离出来
user.middleware.js
检查前置条件,类似 solidity 的 modifier
错误处理
- 目录结构
- 错误常量
error-types.js
假如前面的
verifyUser
报错:- error-handle.js
- index.js;
密码处理
utils/password-handle.js
middleware/user.middleware.js