初衷:不想改变团队原有的开发模式,前端负责展示和界面路由,后端简单负责用于API;待解决问题:1.服务端渲染(部分界面【商品界面】需要使用服务端渲染,但管理界面不需要服务端渲染);2、由于问题1的出现,我们需要服务端渲染,需要控制路由,部分接口需要使用后端模板引擎。3.当然我不想写两套api请求方法,Node.js可以搞定,用一个解决方案;4.当然,后台服务请求使用代理服务。方案选择:1.koa2基础框架2.axios--api请求服务3.http-proxy--代理转发剩下的日志处理,路由,后端模板引擎,异步语法。具体实现【仅供参考】:1.代理转发【编写koa2中间件】:匹配请求路由代理转发目标服务器//中间件request_proxy.jsvarhttpProxy=require('http-proxy');//EG:http://localhost:3001/rs-server-api/v1/goods/listvarproxy=newhttpProxy.createProxyServer({target:'https://stage.recovery-server.jiahuyunyi.com/',changeOrigin:true//对于虚拟主机站点,更改主机标头以匹配目标主机});varresponse_formatter=(ctx)=>{proxy.web(ctx.req,ctx.res);ctx.body=ctx.res;}varurl_filter=(pattern)=>{returnasync(ctx,next)=>{varreg=newRegExp(pattern);try{//使用常规url格式化if(reg.test(ctx.originalUrl)){response_formatter(ctx);等待下一个();}catch(error){//继续抛出,让外层中间件处理日志抛出错误;}}}module.exports=url_filter;constrequest_proxy=require('./middlewares/request_proxy');//匹配路由/rs-server-api/v1/app.use(request_pr氧('^/rs-server-api/v1/'));2.后端服务:当然ajax请求也是用这个jsimportaxiosfrom"axios";//无权限直接跳转到登录界面functionfetchGoodsList(){returnaxios.get('http://localhost:3001/rs-server-api/v1/goods/list');}exportdefault{fetchGoodsList:fetchGoodsList}在控制器中调用服务varrouter=require('koa-router')();varService=require('../services/index.js');router.get('/',asyncfunction(ctx,next){ctx.state={title:awaitService.fetchGoodsList().then((response)=>{returnJSON.stringify(response.data);})};awaitctx.render('index',{});})module.exports=router;最终项目DEMO地址,借鉴了很多前辈的代码,只是添加了代理转发https://github.com/HereSincer...
