我正在使用与其他任何云功能类似的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()
仅被调用一次,而不是在每次调用该函数时调用。
我们将不胜感激。
谢谢