nodejs + azure函数应用程序-处理数据库连接的最佳实践?

时间:2019-02-20 17:38:13

标签: node.js mongodb azure azure-functions azure-cosmosdb

如果这不是问这个问题的地方(请提前道歉),请指向正确的论坛。

我主要想知道是否在 nodejs 应用程序中,在天蓝色功能应用程序内部实例化全新数据库连接,然后关闭每次功能应用程序退出时,这都是一个坏主意。 (感觉像个坏主意)。

这是标准做法吗,还是有更好的方法来使无服务器功能的调用之间的连接保持活动状态?还是没关系吗?

所讨论的连接最多是与cosmosdb实例通信的 mongodb本地驱动程序连接或mongoose连接

1 个答案:

答案 0 :(得分:1)

每次创建一个新的数据库连接都会导致性能下降。您可以向数据库客户端添加全局指针以保留连接。如下所示:

const mongodb = require('mongodb');

const uri = 'mongodb+srv://XYZ/test';

let client = null;

module.exports = function (context, req) {
  context.log('Running');

  let hasClient = client != null;

  if (client == null) {
    mongodb.MongoClient.connect(uri, function(error, _client) {
      if (error) {
        context.log('Failed to connect');
        context.res = { status: 500, body: res.stack }
        return context.done();
      }
      client = _client;
      context.log('Connected');
      query();
    });
  } else {
    query();
  }

  function query() {
    client.db('test').collection('tests').find().toArray(function(error, docs) {
      if (error) {
        context.log('Error running query');
        context.res = { status: 500, body: res.stack }
        return context.done();
      }

      context.log('Success!');
      context.res = {
        headers: { 'Content-Type': 'application/json' },
        body: 'Document Length ' + docs.length + ', Connection reused ' + hasClient
      };
      context.done();     
    });
  }
};