我有几个cloud function
与下面的文件结构
root
|_ functions
|___src
|___services
| |___function1.ts
| |___function2.ts
| |___function3.ts
|
|___index.tx
在我的索引中,我导入了所有的函数,然后将其导出为云函数
//index.ts
const function1 = require(./services/function1)
const function2 = require(./services/function2)
const function3 = require(./services/function3)
exports.function1 = function1.function1
exports.function2 = function2.function2
exports.function3 = function3.function3
然后,只有在我的函数1中我才想使用redis,所以我在我的函数1中包含了redis,这是我的redis.ts
import * as redis from "redis";
const REDISHOST = process.env.REDISHOST || 'localhost';
const REDISPORT = Number(process.env.REDISPORT || 6379);
const redisClient = redis.createClient({
socket: {
host: REDISHOST,
port: REDISPORT,
},
});
redisClient.on('error', err => console.error('ERR:REDIS:', err));
redisClient.connect();
export default redisClient;
我在我的function1中导入它如下:
import redisClient from "../common/redis"
exports.function1 = onRequest(logic)
我可以用我的函数1成功连接到redis。但问题是,当我部署function2和function3时,即使我没有将redis客户端导入到我的function2和function3中,它也在尝试连接到redis。
我做错什么了?
1条答案
按热度按时间emeijp431#
首先要意识到的是,您的index.ts对于您从中导出的每个函数都要执行 * 完整 *。这意味着每个函数都将作为其执行的一部分,在新服务器示例的冷启动时:
1.导入redis.ts
1.创建
redisClient
全局示例你应该做的不是将
redisClient
定义为一个全局变量,它总是在模块加载时被创建。将创建延迟到实际使用客户端的时候,如果需要,可以将其缓存在全局中,以便在同一服务器示例上的后续函数调用中可用。