ExpressJS作为业务流程层?

时间:2014-12-31 23:31:58

标签: node.js express

如何将ExpressJS用作业务流程层?

我有五个NodeJS / ExpressJS" API应用程序"适用于不同的业务功能(安全,人力资源,资产管理,车队管理等)。每个提供原始对象/文档API,并有自己的数据库,应用程序服务器,路由等。我想构建另一个ExpressJS应用程序,坐在前面的那五个"堆栈"并通过REST将多个调用汇集到其他五个堆栈中,提供更高级别的业务操作(即TerminateEmployee等)。

我疯了吗?这是常见的吗?也许我不知道该搜索什么,但我没有找到任何这样做的例子。

顺便说一句:我也在考虑建立高度可重复使用的小部件" (基本上,单个AngularJS服务和UI元素)调用第六个前端堆栈。

1 个答案:

答案 0 :(得分:0)

哇,一个老问题没有得到答复。

SOA,微服务,或者任何名称只是系统架构的抽象思想,它们需要应用,现在让我们定义问题

问题:需要中间件编排

参数:我们需要定义需要运行的中间件(可能是服务名称的字符串和服务端口的数字),这个值需要作为CLI args或process.env <传递/ p>

首先我们需要以JS可读格式存储我们的参数,可以是数组或对象,在我的情况下,我需要在一个端口运行多个服务,并且应用程序需要在多个端口中公开,例如:

来自String

graphql:80 auth:5000 usercrud:5000 trx:6969 docs:4000

到JSON

{
    "80":["graphql"],
    "5000":["auth", "usercrud"],
    "6969":["trx"],
    "7070":["ssr"],
    "4000":["docs"]
}

我们可以通过使用流行的yargs使CLI接受args,但也需要能够从.env文件传递的字符串读取,解析字符串时这很容易,因为我们可以控制格式通过简单地使用String.split()函数我们可以创建一个数组,我更喜欢在分离上下文(在本例中是中间件/服务)后跟:和此特定服务的端口使用空格,如{{1然后从这个数组中我们可以将值映射到一个Object(注意auth:5000共享同一个端口,所以我们需要容纳这两个服务)。

从这个配置我们可以迭代由其端口反映的键,所以做"5000":["auth", "usercrud"]返回一个Iterable / Array,我们可以根据现代的EcmaScript标准Map / ForEach。在每次迭代中我们都会

Object.keys(service)

通常当我们app.use(require(`./service/${service[port]}`)) http.createServer(app) .listen(port, () => log(`http://127.0.0.1:${port} >>> ${service[port]}`) ) 执行此操作时,但现在我们执行的操作与我们需要暴露的端口一样多,这会增加原子性并减少服务之间的依赖关系。

这种方法的优点是:

  • 可以共享库/助手
  • 单个代码库&amp;稠度
  • 单个容器开发/分期/集成测试
  • 基于资源消耗的受控服务(不仅是任务,如果其中一个服务空闲/消耗非常少的资源,我们可以将其与其他服务一起加入)

up&amp;运行来源:https://github.com/nsnull0/eService/blob/master/packages/%40nodejs-express/index.js