gpt4 book ai didi

node.js - 如何在环回中动态绑定(bind)API请求的数据源

转载 作者:太空宇宙 更新时间:2023-11-03 23:20:52 25 4
gpt4 key购买 nike

以下场景中,不同的 api 请求必须根据请求的来源动态查询不同的数据库。例如,一个 api 请求必须同时查询 db1 中的 users 表,另一个 api 或具有不同源上下文的同一 api 必须从 db2 查询 users 表。除了环回公开的默认路由之外,所有路由都可以实现这一点。我需要一个解决方案来将数据源动态绑定(bind)到环回公开的默认 api,记住它是一个单线程应用程序,这样将数据源绑定(bind)到 api 无论如何都不应该影响应用程序并行提供的其他 api 的行为。

最佳答案

免责声明:我是 LoopBack 的共同作者和当前维护者之一。

我的建议是为每个数据库创建一个 LoopBack 应用程序,并编写一个自定义 Express 中间件,将 API 请求路由到正确的 LoopBack 应用程序。

为了防止这些每个数据库应用程序实例之间的交互,启用未记录的“本地注册表”模式至关重要,其中每个应用程序都有自己的本地模型注册表。 (默认情况下,LoopBack 使用全局模型注册表。)

请注意,此功能并未广泛使用,您可能会遇到无法正常工作的边缘情况。您最终可能会调试环回内部并发送拉取请求来解决这些问题。 (过去一两个用户已经发生过这种情况,因此大多数问题现在应该已经解决。)

const app = loopback({localRegistry: true});

上面的代码将创建一个新的 LoopBack 应用程序,该应用程序不共享任何全局状态,并且没有配置任何内置模型(没有 User、AccessToken 等)

这对于loopback-boot效果很好,它可以准确加载在server/model-config.json中配置的内置模型。如果您从代码手动加载模型,您可能需要将所有内置模型预加载到您的应用程序中。这可以通过 loadBuiltinModels 选项来实现:

const app = loopback({localRegistry: true, loadBuiltinModels: true});

现在我们知道如何创建一个不共享任何全局状态的应用程序,我们需要创建一个 LoopBack 应用程序注册表,每个数据库一个(这可以在第一次访问时延迟完成)。我将把这部分作为练习留给读者。唯一重要的部分是在每个数据库应用程序上安装 loopback.rest() 中间件,否则我们以后将无法实现请求处理。

const app = loopback({localRegistry: true, loadBuiltinModels: true});
app.use(loopback.rest());

注册 LoopBack 应用程序后,我们可以编写 Express 中间件来处理请求:

function handleApiRequest(req, res, next) {
const app = // obtain the LoopBack application instance to use
app(req, res, next);
}

// use the middleware in your root application, e.g.
const app = express();
app.use(cors({/*...*/});
app.use(handleApiRequest);
app.use(errorHandler({/*...*/});

关于node.js - 如何在环回中动态绑定(bind)API请求的数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50042266/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com