资讯专栏INFORMATION COLUMN

简易Node中间层【只作为中间层】

CntChen / 2070人阅读

摘要:方案选择基础框架请求服务代理转发其余日志处理,路由,后端模板引擎,异步语法自己选择了。

初衷:我并不想改变团队原有开发模式,前端负责展现和界面路由,后端单纯负责API;
要解决的问题:
1.服务端渲染(部分界面【商品界面】需要使用服务器端渲染,但是管理类型界面并不需要服务器端渲染);
2.由于问题1的出现,所以我们需要服务器端渲染,需要控制路由,需要部分界面使用后端模板引擎。
3.当然我不想写两套api请求方式,Node.js可以搞定使用一套方案;
4.后台服务请求当然走代理服务。
方案选择:
1.koa2基础框架
2.axios--api请求服务
3.http-proxy--代理转发
其余日志处理,路由,后端模板引擎,异步语法自己选择了。
具体实现【仅供参考】:
1.代理转发【写koa2中间件】:匹配请求路由代理转发目标服务器

//中间件request_proxy.js
var httpProxy = require("http-proxy"); 
//EG:http://localhost:3001/rs-server-api/v1/goods/list
var proxy = new httpProxy.createProxyServer({
    target: "https://stage.recovery-server.jiahuyunyi.com/",
    changeOrigin: true              // for vhosted sites, changes host header to match to target"s host
});
var response_formatter = (ctx) => {
    proxy.web(ctx.req, ctx.res);
    ctx.body = ctx.res;
} 
var url_filter = (pattern) => {
    return async (ctx, next) => {
        var reg = new RegExp(pattern);
        try {
            //通过正则的url进行格式化处理
            if (reg.test(ctx.originalUrl)) {
                response_formatter(ctx);
            }
            await next();
        } catch (error) { 
            //继续抛,让外层中间件处理日志
            throw error;
        } 
    }
}
module.exports = url_filter;
const request_proxy = require("./middlewares/request_proxy");
//匹配路由/rs-server-api/v1/
app.use(request_proxy("^/rs-server-api/v1/"));

2.后端服务:当然ajax请求也是用这个js

import axios from "axios";
//没有权限直接跳转到登录界面
function fetchGoodsList() {
    return axios.get("http://localhost:3001/rs-server-api/v1/goods/list");
}
export default {
    fetchGoodsList: fetchGoodsList
}

在controller中调用服务

var router = require("koa-router")();
var Service = require("../services/index.js");
router.get("/", async function (ctx, next) {
  ctx.state = {
    title: await Service.fetchGoodsList().then((response) => {
      return JSON.stringify(response.data);
    })
  };
  await ctx.render("index", {
  });
})
module.exports = router;

最后项目DEMO地址,基于很多位前辈代码,仅仅加入代理转发
https://github.com/HereSincer...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/81389.html

相关文章

  • koa2 一网打尽(基本使用,洋葱圈,中间件机制和模拟,源码分析(工程,核心模块,特殊处理),核心点

    摘要:洋葱圈处理模型。基于的灵活强大的中间件机制。参考官网提供的基本,不在赘述部分实现,参考源码分析常用服务端口监听返回适用于方法的回调函数来处理请求。 本文 github 地址: https://github.com/HCThink/h-blog/blob/master/source/koa2/readme.md github 首页(star+watch,一手动态直达): https:...

    william 评论0 收藏0
  • 教你编写 Node.js 中间件,实现服务端缓存(附demo源码)

    摘要:但是这篇文章除去科普基本概念外,更重要的就是介绍中间件思想,并自己来实现一个服务端缓存中间件。 showImg(https://segmentfault.com/img/remote/1460000011043576); Express 作为 Node.js 的框架,如今发展可谓如日中天。我很喜欢其灵活、易扩展的设计理念。尤其是该框架的中间件架构设计:使得在应用中加入新特性更加标准化、...

    jerryloveemily 评论0 收藏0
  • KOA2框架原理解析和实现

    摘要:实现的四大模块上文简述了源码的大体框架结构,接下来我们来实现一个的框架,笔者认为理解和实现一个框架需要实现四个大模块,分别是封装创建类构造函数构造对象中间件机制和剥洋葱模型的实现错误捕获和错误处理下面我们就逐一分析和实现。 什么是koa框架?        koa是一个基于node实现的一个新的web框架,它是由express框架的原班人马打造的。它的特点是优雅、简洁、表达力强、自由度...

    tracymac7 评论0 收藏0
  • KOA2框架原理解析和实现

    摘要:实现的四大模块上文简述了源码的大体框架结构,接下来我们来实现一个的框架,笔者认为理解和实现一个框架需要实现四个大模块,分别是封装创建类构造函数构造对象中间件机制和剥洋葱模型的实现错误捕获和错误处理下面我们就逐一分析和实现。 什么是koa框架?        koa是一个基于node实现的一个新的web框架,它是由express框架的原班人马打造的。它的特点是优雅、简洁、表达力强、自由度...

    liangzai_cool 评论0 收藏0

发表评论

0条评论

CntChen

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<