您好,我正在尝试填写使用(HTML,CSS,JS,NODE.JS,PASSPORT.JS

问题描述 投票:0回答:1

我正在尝试让我的注册页面正常工作。当我输入用户名和密码时,我只会得到

{"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)
javascript html node.js mongodb passport.js
1个回答
0
投票
// 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 数据库。我还传递了一些选项来避免弃用警告并启用一些功能。您可以[此处]阅读有关它们的更多信息。
  • 在使用任何 Mongoose 模型之前,我将
    connectDB
    函数调用移至 server.js 文件的顶部。这可确保您在执行任何查询之前建立与数据库的连接。
    connectDB
    函数在您的 config/db 文件中定义,它只是将
    mongoose.connect()
    调用包装在 try-catch 块中。
  • 我添加了一个 console.log 语句来打印
    mongoose.connection.readyState
    属性。这是一个指示连接状态的数字:0 表示已断开连接,1 表示已连接,2 表示正在连接,3 表示断开连接。您可以使用它来调试连接问题。
© www.soinside.com 2019 - 2024. All rights reserved.