首页 > 解决方案 > 封装我的后端应用程序的动态更改和添加的部分

问题描述

你好 Stack Overflow 社区!

设想:

我的应用程序是一个完全基于 NodeJS 的客户管理平台。它充当集成来自不同系统的数据的中间件

客户可以激活和停用一些“服务”。此应用程序将控制他们有权在请求时执行此类操作。

对这些服务进行更改将执行一个脚本,该脚本将联系外部系统以查询和更新信息,无论成功与否,最终都会返回信息。通常这些脚本很简单。

直到这里一切都很酷。我们可以简单地将每个服务的服务脚本集成到主应用程序中,仅此而已,对吗?

我还没有说的是:将会有大量不同的服务(最终我们可能会有数百个),并且它们会经常更改,例如,如果推出促销活动。

挑战:

我们不能仅仅为了推出新服务而发布新版本的客户管理应用程序;几乎没有封装,所以事情可能会破裂;这些新脚本的性能可能会影响主应用程序;需要重新启动主应用程序以应用更改等。

我希望能够以“即插即用”的方式随时创建和修改大量这些服务,将其集成到主应用程序中并不是一个非常漂亮的解决方案。

问题:

除了主应用程序之外,您将如何封装这些可以随时动态更改的脚本?

我正在考虑将这些服务编程为 Python 脚本,在需要时从主应用程序调用。Python 简单且多平台,可单独运行。这是一个好方法吗?请不要犹豫,告诉我这个想法是多么可怕,如果它有任何机会的话!

标签: pythonnode.jsintegration

解决方案


好吧,已经很久没有答案了,所以我给出我的结论:

在与两位后端编程工程师交谈后,他们批准了我的解决方案,即为require每个“附加”部分(代码中称为“组件”)加载(使用)JavaScript 文件,然后执行它,最后刷新缓存。

该解决方案允许在不重新启动程序的情况下随时随地编辑文件,并在需要时允许将所有内容保持在一个文件中。

// Component script load part:
let componentScriptPath = '../custom_component_scripts/' + component_id;
let componentScript;
try {
    componentScript = require(componentScriptPath);
} catch(error) {
    console.error('critical', 'Failed to read or find scripts for component "' + component_id + '". Error: ' + error);
    delete require.cache[require.resolve(componentScriptPath)];
    console.log('Flushed script cache for "' + component_id + '"');
    throw error;
}

// Component script execution part:
try {
    await componentScript.actions[operation](subscription_id, parameters)
    console.log('Component script for "' + component_id + '" reported success');
} catch(error) {
    console.error('Component script for "' + component_id + '" reported failure');
    throw error;
} finally {
    delete require.cache[require.resolve(componentScriptPath)];
    console.log('Flushed script cache for "' + component_id + '"');
}

推荐阅读