1.Nodejs 事件循环
请移步事件循环
大体是这 6 个步骤:
timer -> I/O 回调 -> idle 闲置阶段 -> Poll -> check -> close Callback
2.说说中间件,如何封装一个中间件
NodeJS 中,中间件主要是指处理 http 请求和响应的函数,在 express、koa 等 web 框架中,中间件的本质为一个回调函数,参数包含请求对象、响应对象和执行下一个中间件的函数
Koa 中间件采用的是洋葱圈模型,每次执行下一个中间件传入两个参数:
ctx :封装了 request 和 response 的变量 next :进入下一个要执行的中间件的函数,下面则通过中间件封装 http 请求过程中几个常用的功能: 参考
express 中间件 token 校验
module.exports = function resolveToken(options) { return (ctx, next) => { try { // get Token const token = ctx.header.authorization if (token) { try { await verify(token) } catch(e) { console.log(err) } } } catch(e) { console.log(e) } } } 在这个示例中,resolveToken 函数返回一个函数,该函数接收请求和响应对象,并且调用 next() 函数来将控制权传递给下一个中间件函数。
日子模块中间件
module.exports = (option) => async (ctx, next) => {
const startTime = Date.now();
const requestTime = Date.now();
await next();
const ms = Date.now() - startTime;
let logout = ${ctx.request.ip} -- ${requestTime} -- ${ctx.method} -- ${ctx.url} -- ${ms}ms;
// 输出日志文件
fs.appendFileSync('./log.txt', logout + '\n');
};
3.说说你对洋葱模型的理解
Koa 框架是一个 Node.js 的 Web 应用程序框架,它通过中间件(Middleware)机制实现了业务逻辑的分层和复用。Koa 中使用的中间件机制被称为洋葱模型(Onion Model),其核心思想是将 HTTP 请求和响应对象依次传递给各个中间件函数,形成一条类似于洋葱的管道,最终返回响应结果。
具体来说,Koa 洋葱模型的处理流程可以大致分为四个阶段:
请求阶段:从外到内依次执行请求相关的中间件,例如解析请求体、设置响应头等操作。
业务阶段:执行业务逻辑相关的中间件,例如处理授权、验证身份、路由分发等操作。
响应阶段:从内到外依次执行响应相关的中间件,例如格式化响应数据、设置响应头等操作。
错误处理阶段:如果在前面的中间件过程中出现了错误,则会跳过后续中间件并交给错误处理中间件来处理异常情况。