如何在Next.js中使用MongoDB连接解决Netlify和Vercel上的504超时错误”

e4eetjau  于 2023-01-20  发布在  Go
关注(0)|答案(1)|浏览(250)

每当我的网站空闲一段时间,我加载它,它显示一个504超时错误从netlify和vercel。我知道这是由于超时限制设置的两个平台,然后在重新加载它的工作正常我知道这是由于数据库连接,它需要一段时间来连接在初始连接
有没有一种方法可以让它一直保持连接,或者你建议我在下一个js项目中如何处理这个问题,以防止它在空闲一段时间后花这么长时间来连接?
这是我的数据库连接函数

import mongoose from 'mongoose'

const MONGODB_URI = process.env.MONGO_URL

if (!MONGODB_URI) {
  throw new Error(
    'Please define the MONGODB_URI environment variable inside .env.local'
  )
}

let cached = global.mongoose

if (!cached) {
  cached = global.mongoose = { conn: null, promise: null }
}

async function db() {
  if (cached.conn) {
    return cached.conn
  }

  if (!cached.promise) {
    const opts = {
      bufferCommands: false,
    }

    cached.promise = mongoose.connect(MONGODB_URI, opts).then((mongoose) => {
      return mongoose
    })
  }

  try {
    cached.conn = await cached.promise
  } catch (e) {
    cached.promise = null
    throw e
  }

  return cached.conn
}

export default db

我是这么称呼它的:await db(),这是数据库URL的外观mongodb+srv://*********@cluster0.7xbw7v5.mongodb.net/?retryWrites=true&w=majority

brccelvz

brccelvz1#

如果您的问题是由冷启动引起的,那么一个很好的解决方法是以您喜欢的时间间隔定期ping服务器以预热服务器
我在https://www.checklyhq.com/中使用了checkly
因此,您可以为预热创建一个单独的端点,并检查是否应按设置的时间间隔运行它

相关问题