mongoose 如何在Next.js启动时只运行一次代码,而不是每个请求运行一次?

bvuwiixz  于 2023-08-06  发布在  Go
关注(0)|答案(1)|浏览(104)

我是Next.js的初学者,我想在Next.js中使用mongoose,但我不知道在哪里连接到数据库。当我在Express中使用Mongoose时,我连接到app.js中的数据库,所以MongoDB只在启动时连接一次。

// app.js
const express = require('express');
const mongoose = require("mongoose");
const userRouter = require('./routes/user_actions');
const app = express();

// Connect to MongoDB; this code will only run once when the app starts.
await mongoose.connect('mongodb://localhost:27017/user');

app.use('/user', userRouter);
module.exports = app;

字符串
但是在Next.js中,我不知道在哪里连接到数据库。我在app/route.js中连接到数据库,但每个请求都会连接到数据库,这不是我想要的。我想知道是否有可能在Next.js中启动时运行一次代码,就像Express一样,而不是在每次发出请求时运行一次代码。

// app/route.js
import {NextResponse} from 'next/server'
import mongoose from 'mongoose'

// Connect to MongoDB; this code will run on every request.
mongoose.connect('mongodb://localhost:27017/user')

export async function POST(request: Request) {
    const res = await request.json()
    console.log(request);
    console.log(res);
    return NextResponse.json({hello: 'world'})
}


我注意到一个类似的问题here,但没有答案。
我应该在Next.js中做什么?

  • 谢谢-谢谢
eufgjt7s

eufgjt7s1#

使用mongoose.connection.readyState
返回:

  • 0 =断开连接
  • 1 =已连接
  • 2 =连接
  • 3 =断开连接
  • 99 =未初始化
if (mongoose.connection.readyState === 1) {
    console.log("is already connected");
    return;
}
mongoose.connect('mongodb://localhost:27017/user');

字符串

相关问题