从云功能创建单个mongodb / mongoose连接

时间:2019-07-31 09:02:08

标签: javascript node.js mongodb

我正在使用与其他任何云功能类似的SAP云功能-Google,Azure和Amazon。我的用例非常简单-用户调用该函数,该函数使用连接字符串连接到MongoDB Atlas,执行CRUD操作并返回结果。

我的云功能定义如下: index.js-

'use strict';

const mongoose = require('mongoose');
const Address = require('./models/Address')


module.exports = async function (event, context) {
    const mongoConfig = context.getSecretValueJSON('mongodb', 'config.json');
    try {
        await mongoose.connect(mongoConfig.config.uri, {
                useNewUrlParser: true,
                useCreateIndex: true
            });
        console.log("Connected to database")


        let address = new Address({
            "city":"wakanda"
        })
        await address.save()
        console.log("Successfully saved address info")
        return address;


    } catch (error) {
        console.log("Error - " + error)
        return error
    }
}; 

相应的架构和模型在另一个文件中定义- 地址.js

const mongoose = require("mongoose");

const addressSchema = new mongoose.Schema({
    city: {
        type: String,
        required: true,
        trim: true
    }
}, { strict: false });

const Address = mongoose.model('Address', addressSchema);

module.exports = Address

现在的问题是,每次调用该函数时,猫鼬都会打开与数据库的新连接,在我看来这是一种非常低效的处理方式。我想知道一些有关如何组织代码的指针,以便连接仅发生一次(最好是在函数的初始部署期间)。

我尝试的是-在另一个名为connection.js的文件中定义连接详细信息-

const mongoose = require('mongoose');

mongoose.connect('mongodb:..........',{
    useNewUrlParser: true,
    useCreateIndex: true
});

但是现在的问题是,我必须将连接详细信息硬编码在文件connection.js中。在第一个代码段中,您将看到我使用了一个名为-

的属性。
mongoConfig.config.uri

此属性仅在函数内部可用,并且由传递到云函数的变量context定义。此属性从我们在部署期间定义的环境变量中选择连接详细信息。

我想利用环境变量而不是硬编码任何敏感信息。同时确保连接-mongoose.connect()仅被调用一次,而不是在每次调用该函数时调用。

我们将不胜感激。

谢谢

0 个答案:

没有答案