创建全局数据存储客户端

时间:2018-02-01 20:04:45

标签: node.js google-app-engine google-cloud-datastore

有关创建数据存储客户端对象的时间和位置的约定是什么?

variables

在文档中,似乎在每个文件中都创建了一个新的数据存储区实例。创建一个初始化数据存储区连接的单例并将相同的实例返回到需要它的应用程序的每个部分会有什么好处吗?

1 个答案:

答案 0 :(得分:2)

如果new Datastore({})实际创建了一个新实例或返回一个单例,它取决于底层代码,你必须检查它。

您可以做的是将数据存储区实例的创建移动到单独的文件,并将require该实例移动到您需要访问数据存储区的每个文件中。由于您require的依赖关系被缓存,因此您将始终获得相同的实例。

伪代码:
datastore.js

const datastore = new Datastore({});

module.exports = datastore;

foo.js

const datastore = require('./datastore');

// do something with datastore

回复您的后续问题。

如果查看nodejs / Datastore模块的源代码,您将看到相同的模式:

的src / index.js

* @example <caption>Import the client library</caption>
* const Datastore = require('@google-cloud/datastore');
// ...
module.exports = Datastore;

无论您在哪里需要客户端库:

const Datastore = require('@google-cloud/datastore');

它将始终返回相同的实例。数据存储区将为您处理扩展和连接(池)。

总之:在每个文件中要求客户端库或将其包装在单独的文件中并且在需要连接的文件中需要它之间没有功能差异。

就个人而言,我更喜欢在单独的文件中包装连接,并要求在我的数据访问文件中。这样做的好处是: *您抽象出实际的实现。如果您需要更改数据存储区或连接方式,它将只在一个地方。 *如果您需要提供连接参数(如密码),您只需要执行一次。它可以避免一遍又一遍地编写相同的代码。