node-middleware
-
- 有一步步的详细代码
-
为什么互联网公司开始用node.js做web服务的中间件?有什么好处吗? - 天猪的回答 - 知乎
- 乍一看,似乎这一层一直都存在,只不过是由后端同学维护而已。
- 我们知道,前端贴近用户侧,需求的变化太快了,后端同学来维护会很累。
- 在 BFF 理念中,最重要的一点是:服务自治,谁使用谁开发,即它应该由前端同学去维护
-
- 服务端接口,究竟是面向 UI 还是通用服务?
- 一句话阐述:让纯前端开发者,只需写几个 Function 即可使用到后端相关的能力。
(node去请求数据再拼接再输出,会不会慢?node的请求是服务器内部的,会很快?)
-
- (有代码片段,比较详细丰富)
- 由nginx做接口转发、负载,varnish做数据缓存层,node是业务处理层,在4核服务器上启动4个node进程(跟cpu核数对应),通过nginx的ip_hash做负载均衡,将请求均分给各个node进程,充分利用cpu的性能;node进程在收到请求后会通过内网调用发送http请求获取后端接口数据;varnish是一款高性能、开源的反向代理服务器和缓存服务器,我们在nginx跟node之间加了一层varnish缓存系统,通过配置在varnish缓存整条接口请求,减少相同请求的透传提高中间层服务性能。
- 上图可学习的;对象结构的写法、object().keys()是啥、throw new ApiError、async是否就是return的promise
- (去看看优秀代码,不用纠结全部看懂,就是去看看类似的需求的写法,如其他项目http是如何封装的,async的错误处理)
- (中间层还能来做错误搜集和数据监控)
中间层接口由使用接口的前端工程师开发,对展现和接口的功能更加熟悉,避免了以前的工作模式中接口方跟各方的需求对接、沟通、联调时间,这样使得项目的推进更加顺利,项目迭代会更快;
- koa2框架的中间件机制实现得非常简洁和优雅,这里学习一下框架中组合多个中间件的核心代码。
// async函数自动返回Promise对象
const middleware2 = async (req, res, next) => {
console.log('middleware2 start')
await new Promise(resolve => {
setTimeout(() => resolve(), 1000)
})
await next()
console.log('middleware2 end')
}
(延时的写法)
-
- 有github仓库代码
- 使用 koa 搭建 node 中间层服务器
使用 koa-bodyparser 中间件解析请求参数
使用 koa-router 中间件配置路由
自定义 restful api 中间件
使用 axios 来转发封装请求
完善路由、控制器
- 如何选择正确的Node框架:Express,Koa还是Hapi?
- 貌似koa和中间件相关的插件多一些,且async的写法更清晰,就用这个试试吧
- Koa的基本使用
- 这个有代码,可以参考着写写
- 下面代码很清晰的看出了洋葱模型
const Koa = require('Koa');
const app = new Koa();
// 最外层的中间件
app.use(async (ctx, next) => {
await console.log(`第 1 个执行`);
await next();
await console.log(`第 8 个执行`);
});
// 第二层中间件
app.use(async (ctx, next) => {
await console.log(`第 2 个执行`);
await console.log(`第 3 个执行`);
await next();
await console.log(`第 6 个执行`);
await console.log(`第 7 个执行`);
});
// 最里层的中间件
app.use(async (ctx, next) => {
await console.log(`第 4 个执行`);
ctx.body = "Hello world.";
await console.log(`第 5 个执行`);
});
app.listen(3000, () => {
console.log(`Server port is 3000.`);
})
- 7.3k star
- 对前后端接口调试的痛点分析很在理,就是不知道用起来怎么样