简单总结了NodeJS相关基础知识
chrome V8
引擎,解析和执行代码机制和浏览器js相同,vite
、webpack
、gulp
、babel
SSR
包管理器 npm
交互式解释器
.exit也可以
)。Node.js 基本上所有的事件机制都是用设计模式中观察者模式实现
事件驱动模型
阻塞与非阻塞概念
事件处理代码流程
javascriptconst events = require('events')
const eventEmitter = new events.EventEmitter()
function connectHanddler () {
console.log('connected被调用')
}
eventEmitter.on('connect', connectHanddler)
eventEmitter.emit('connect')
JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。处理文件流和处理TCP流(如文件之间传数据),必须使用到二进制数据(IO操作效率高),因此有了Buffer类,该类用来创建一个专门存放二进制数据的缓存区。
Node.js,Stream 有四种流类型:
所有的 Stream 对象都是 EventEmitter 的实例。常用的事件有:
写入流、管道流、链式流
require、module.exports用法
nodejs文件加载逻辑(非常重要)
根据request.url 正则处理url路径
global
__dirname
__filename
process
nodejs内置模块
https://koa.bootcss.com/
https://www.expressjs.com.cn/
异同:
javascript// express
res.json({name: 'zs'})
javascript// koa 中间件洋葱模型执行流程模拟
async function fn1 (ctx, next) {
console.log('fn1 start')
await next();
console.log('fn1 end')
}
async function fn2(ctx, next) {
console.log('fn2 start')
await next();
console.log('fn2 end')
}
function componse (middlewares) {
return function (ctx) {
return dispatch(0)
function dispatch(i) {
let fn = middlewares[i]
if(!fn) {
return Promise.resolve()
}
return Promise.resolve(
fn(ctx, function next () {
return dispatch(i + 1)
})
)
}
}
}
componse([fn1, fn2])({/* ctx */})
// fn1 start
// fn2 start
// fn2 end
// fn1 end
nodejs启动服务极简案例
javascriptconst http = require('http');
let server = http.createServer();
server.on('request',(req,res) => {
res.end('xxx');
});
server.listen(8888,()=>{
console.log('服务器启动在8888端口');
});
本文作者:郭敬文
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!