我正在尝试让我的注册页面正常工作。当我输入用户名和密码时,我只会得到
{"message":"Registration failed"}
。我收到以下错误:
MongooseError: Operation `users.findOne()` buffering timed out after 10000ms
at Timeout.<anonymous> (C:\path\to\your\file\node_modules\mongoose\lib\drivers\node-mongodb-native\collection.js:186:23)
at listOnTimeout (node:internal/timers:569:17)
at process.processTimers (node:internal/timers:512:7)
这是我的用户注册表单的 server.js 代码:
app.post('/user/register', async (req, res) => {
const { username, password } = req.body;
try {
const existingUser = await User.findOne({ username });
if (existingUser) {
return res.status(409).json({ message: 'Username already exists' });
}
// Create a new user instance
const newUser = new User({ username, password });
// Save the user to the database
await newUser.save();
console.log('User registered successfully');
res.status(200).json({ message: 'User registered successfully' });
} catch (err) {
console.error(err); // Log the error for debugging
res.status(500).json({ message: 'Registration failed' });
}
});
您好,我正在尝试使我的注册页面正常工作。当我输入用户名和密码时,我只会得到
{"message":"Registration failed"}
。我收到以下错误:现在我也收到,
MongooseError: Operation `users.findOne()` buffering timed out after 10000ms
at Timeout.<anonymous> (C:\Users\RistovskiWIN\Desktop\MladenWeb\node_modules\mongoose\lib\drivers\node-mongodb-native\collection.js:186:23)
at listOnTimeout (node:internal/timers:569:17)
at process.processTimers (node:internal/timers:512:7)
// Dot env
import dotenv from 'dotenv';
dotenv.config();
// Mongoose Connection
import mongoose from 'mongoose';
mongoose.connect(process.env.MONGO_URI, {
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true,
useFindAndModify: false,
});
//creating main platform
const connectDB = require('./config/db');
connectDB(); // Call the function here
console.log(mongoose.connection.readyState);
app.post('/user/register', async (req, res) => {
const { username, password } = req.body;
try {
const existingUser = await User.findOne({ username });
if (existingUser) {
return res.status(409).json({ message: 'Username already exists' });
}
// Create a new user instance
const newUser = new User({ username, password });
// Save the user to the database
await newUser.save();
console.log('User registered successfully');
res.status(200).json({ message: 'User registered successfully' });
} catch (err) {
console.error(err); // Log the error for debugging
res.status(500).json({ message: 'Registration failed' });
}
});
让我解释一下我所做的每个修复:
dotenv
模块来从 .env
文件加载环境变量。这样,您可以安全地存储 MongoDB 连接字符串并避免在代码中暴露它。您需要安装 dotenv
作为依赖项,并在根目录中创建一个 .env
文件,其中包含以下内容:MONGO_URI=<your connection string>
mongoose
并使用它通过 MONGO_URI
变量连接到 MongoDB 数据库。我还传递了一些选项来避免弃用警告并启用一些功能。您可以[此处]阅读有关它们的更多信息。connectDB
函数调用移至 server.js 文件的顶部。这可确保您在执行任何查询之前建立与数据库的连接。 connectDB
函数在您的 config/db 文件中定义,它只是将 mongoose.connect()
调用包装在 try-catch 块中。mongoose.connection.readyState
属性。这是一个指示连接状态的数字:0 表示已断开连接,1 表示已连接,2 表示正在连接,3 表示断开连接。您可以使用它来调试连接问题。