小编Kam*_*ari的帖子

Vercel 为每个请求创建新的数据库连接

我正在开发一个新网站,虽然我们在本地开发时一切正常,但当我们尝试在 Vercel 上部署时遇到了问题。该应用程序为页面和 API 使用 Sapper 框架,以及我们通过 Mongoose 访问的 MongoDB Atlas 中的数据库。我们在本地的行为是我们建立npm run dev了一个单一的数据库连接,该连接一直持续到我们关闭应用程序。

本地日志

但是,当它被部署到 Vercel 时,建立数据库连接并打印“数据库连接成功”消息并且只应该运行一次的代码会在每个 API 请求上运行

每个请求的新数据库连接

这似乎很快就失控了,达到了我们数据库 500 个连接的限制: 数据库连接达到限制

结果,在网站被一个用户短暂使用后,我们的一些 API 请求开始失败并出现此错误(我们让 db 接受任何连接而不是 IP 白名单,因此错误给出的建议没有帮助) : API 无法连接到数据库

我们的实现是mongoose.connect在 .js 文件中调用:

mongoose.connect(DB, {
    useNewUrlParser: true,
    useCreateIndex: true,
    useFindAndModify: false,
    useUnifiedTopology: true
}).then(() => console.log("DB connection successful!")).catch(console.error);
Run Code Online (Sandbox Code Playgroud)

然后我们import在 Sapper 的server.js. 我们能够找到的建议是“只缓存连接”,但这并没有成功,而且似乎更重要node-mongodb-native。无论如何,这是我们尝试过的,在本地没有更好或更糟的效果,但也没有解决 Vercel 上的问题:

let cachedDb = {};

exports.connection = async () => {
    if (cachedDb.isConnected)
        return;
        try {
            const …
Run Code Online (Sandbox Code Playgroud)

mongoose mongodb mongodb-atlas vercel sapper

3
推荐指数
1
解决办法
2378
查看次数

标签 统计

mongodb ×1

mongodb-atlas ×1

mongoose ×1

sapper ×1

vercel ×1