将 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",
}
};
然后创建一个 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;
然后创建您的模型,就我而言,我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;
然后让我们创建一个 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);
我们在这里完成了,只需http://localhost:3000/api/user
在请求正文中发出一个包含以下内容的发布请求:如果用户创建成功或出现问题,name
email
您password
将得到响应。user object
error message