0

哦!我是一个小团队的后端,主要在 postgres/nodejs/apollo graphql/react 堆栈中构建应用程序。

在我的爱好项目中,我使用 golang,并且在使用 cobra/viper 构建 CLI 应用程序方面做得很好。我开始尝试将所有关键业务逻辑和数据访问转移到使用 golang 构建并作为二进制文件分发的可重用小型 CLI 应用程序中。我设想这些 cli 的输出可以生成机器可读的 json。

然后,nodejs graphql 服务器将成为 CLI 二进制文件的更浅层包装器,并使用类似的东西调用 const { stdout, stderr } = await exec('<<MY CLI --here >>');

将业务逻辑和数据访问分离到 CLI 中对我来说很有吸引力,因为它在非服务器场景中的可重用性。此外,我真的很喜欢在 go 中编写而不是 node。这似乎是一个不错的主意,但也许我忽略了这种方法的一些陷阱?有人采取过这样的方法吗?

4

1 回答 1

0

仅当个人用户从终端使用它们时才使用实用程序。如果节点服务器收到太多并发请求,从 nodejs 服务器启动如此多的 cli 进程将不会是高效和可扩展的。启动太多 cli 进程会使其变慢并消耗系统资源。

我会使用 API。节点服务器会将请求通过管道传送到 go api 服务器。现在关于 cli,要由用户从终端以独立模式使用,您需要将所有逻辑添加到单独的模块 (lib) 中。这个模块库可以托管(或使用)到 Go api 服务器以及 cmd 中。cmd 实用程序和 go http api 服务器进程将只是主机,而实际的东西在模块中。

或者更好的是,命令行实用程序将有 2 种模式作为 http 服务器或独立实用程序运行。

于 2020-12-30T15:25:50.633 回答