我正在开发一个新网站,虽然我们在本地开发时一切正常,但当我们尝试在 Vercel 上部署时遇到了问题。该应用程序为页面和 API 使用 Sapper 框架,以及我们通过 Mongoose 访问的 MongoDB Atlas 中的数据库。我们在本地的行为是我们建立npm run dev了一个单一的数据库连接,该连接一直持续到我们关闭应用程序。
但是,当它被部署到 Vercel 时,建立数据库连接并打印“数据库连接成功”消息并且只应该运行一次的代码会在每个 API 请求上运行
这似乎很快就失控了,达到了我们数据库 500 个连接的限制:

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

我们的实现是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)