我有一些Zeit micro服务。此设置是多个前端/域/客户端的RESTful API
我需要在遍布应用程序的配置中区分这些客户端。我可以在我的处理程序中设置process.env.CLIENT_ID
,例如我可以在配置处理程序中使用它来知道要加载哪个配置。然而,这将意味着为每个请求域启动一个新的http /微进程(或者我使用的任何方法 - 诸如客户端ID之类的信息将在标题中出现),以便在整个请求中维护process.env.CLIENT_ID
而不是它被另一个客户的另一个同时请求覆盖。
所以我必须让每个微服务检查客户端ID,确定它是否已经为该客户端启动了一个进程,并使用其他方法启动一个新进程。
这似乎很乱,但不确定如何处理事情。通过代码调用传递客户端id(即getConfg(client, key)
在我的情况下是不实际的,我想避免这种情况。
选项:
有没有更好的方法或我在假设中犯了错误?
如果每个客户端进程的方法是更好的方法,我想知道是否有现有的解决方案来管理它?我看过http proxy,micro cluster等,但似乎都没有提供解决这个问题的方法。
答案 0 :(得分:0)
我找到了这个漂亮的工具https://github.com/othiym23/node-continuation-local-storage
// Micro handler
const { createNamespace } = require('continuation-local-storage')
let namespace = createNamespace('foo')
const handler = async (req, res) => {
const clientId = // some header thing or host
namespace.run(function() {
namespace.set('clientId', clientId)
someCode()
})
})
// Some other file
const { getNamespace } = require('continuation-local-storage')
const someCode = () => {
const namespace = getNamespace('foo')
console.log(namespace.get('clientId'))
}