将 MongoDB(Mongoose)添加到 Next.js API

2025-06-10

将 MongoDB(Mongoose)添加到 Next.js API

创建Next.js应用程序后,安装 mongoose,yarn add mongoose然后在应用程序的根目录中创建(next.config.js如果不存在),并在其中添加 MongoDB 连接 URL 字符串。

next.config.js

module.exports = {
    env: {
        mongodburl: "Your MongoDB connection String",
    }
};
Enter fullscreen mode Exit fullscreen mode

然后创建一个 MongoDB 连接中间件,每当我们对 DB 执行操作时,它将被调用来创建到 DB 的新连接或重用现有连接,就我而言,我middleware在应用程序的根目录中添加了文件夹并将其添加到那里。

中间件/mongodb.js

import mongoose from 'mongoose';

const connectDB = handler => async (req, res) => {
  if (mongoose.connections[0].readyState) {
    // Use current db connection
    return handler(req, res);
  }
  // Use new db connection
  await mongoose.connect(process.env.mongodburl, {
    useUnifiedTopology: true,
    useFindAndModify: false,
    useCreateIndex: true,
    useNewUrlParser: true
  });
  return handler(req, res);
};

export default connectDB;
Enter fullscreen mode Exit fullscreen mode

然后创建您的模型,就我而言,我models在应用程序的根目录中添加了文件夹并User在其中创建了一个模型。

模型/用户.js

import mongoose from 'mongoose';
var Schema = mongoose.Schema;

var user = new Schema({
  name: {
    type: String,
    required: true
  },
  email: {
    type: String,
    required: true
  },
  password: {
    type: String,
    required: true
  },
  since: {
    type: Date,
    default: Date.now
  }
});

mongoose.models = {};

var User = mongoose.model('User', user);

export default User;
Enter fullscreen mode Exit fullscreen mode

然后让我们创建一个 API user,并在目录中添加创建新用户的功能pages/api/user

页面/api/user.js

import connectDB from '../../middleware/mongodb';
import bcrypt from '../../middleware/bcrypt';
import User from '../../models/user';

const handler = async (req, res) => {
  if (req.method === 'POST') {
    // Check if name, email or password is provided
    const { name, email, password } = req.body;
    if (name && email && password) {
        try {
          // Hash password to store it in DB
          var passwordhash = await bcrypt.sign(password);
          var user = new User({
            name,
            email,
            password: passwordhash,
          });
          // Create new user
          var usercreated = await user.save();
          return res.status(200).send(usercreated);
        } catch (error) {
          return res.status(500).send(error.message);
        }
      } else {
        res.status(422).send('data_incomplete');
      }
  } else {
    res.status(422).send('req_method_not_supported');
  }
};

export default connectDB(handler);
Enter fullscreen mode Exit fullscreen mode

我们在这里完成了,只需http://localhost:3000/api/user在请求正文中发出一个包含以下内容的发布请求:如果用户创建成功或出现问题,name emailpassword将得到响应。user objecterror message

快乐黑客!

鏂囩珷鏉ユ簮锛�https://dev.to/raphaelchaula/adding-mongodb-mongoose-to-next-js-apis-3af
PREV
正确编写 Sidekiq Worker 代码 1. 不要将逻辑代码放在 Worker 中。2. 不要让 Worker 过大。3. 将代码组织到目录中。4. 规划 Sidekiq 执行计划和优先级方案。5. 定期检查 Sidekiq 任务。结论
NEXT
面向前端开发人员的 Docker:用于开发的自定义 Docker 镜像