简体   繁体   中英

How to send a request to MongoDB in NodeJS?

I have connected to MongoDB using mongoose, no problem there at all. But when I try to send a Get request to create a new user in DB, I get this; "mongoose Error: Operation users.insertOne() buffering timed out after 10000ms" When I look up for the solutions, it was usually about connection to MongoDB, so the suggestions didn't work for me. Here is the code: Routes/auth.js:

const express = require("express");
const authRouter = express.Router();
const User = require("../models/User");
//REGISTER
authRouter.get("/register", async (req, res) => {
  try {
    const user = await new User({
      username: "yessilyurt",
      email:"aaa@aa.com",
      usernickname: "Burak Yesilyurt",
      password: "123456",
    });
    await user.save();
    res.send("user registered");
  } catch (err) {
    console.log(err);
  }
});

module.exports = authRouter;

models/User.js:

const mongoose = require("mongoose");

const UserSchema = mongoose.Schema(
  {
    username: {
      type: String,
      required: true,
      min: 1,
      max: 30,
      unique: true,
    },
    email: {
      type: String,
      required: true,
      min: 6,
      max: 35,
      unique: true,
    },
    password: {
      type: String,
      required: true,
      min: 6,
      max: 20,
    },
    usernickname: {
      type: String,
      required: true,
      min: 1,
      max: 30,
    },
    profilePicture: {
      type: String,
      default: "",
    },
    coverPicture: {
      type: String,
      default: "",
    },
    followers: {
      type: Array,
      default: [],
    },
    followings: {
      type: Array,
      default: [],
    },
    isAdmin: {
      type: Boolean,
      default: false,
    },
  },
  { timestamps: true }
);

module.exports = mongoose.model("User", UserSchema);

index.js:

const express = require("express");
const mongoose = require("mongoose");
const connect = require("mongoose").connect
const dotenv = require("dotenv");
const helmet = require("helmet");
const morgan = require("morgan");
const userRouter = require('./routes/users')
const authRouter = require('./routes/auth')
    
dotenv.config();
mongoose.connect(
  process.env.REACT_APP_MONGO_URL,
  { useNewUrlParser: true,useUnifiedTopology: true },
  () => {
    console.log("mongodb connected");
  }
);

const app = express();

app.listen(3838, () => {
  console.log("Backend server is running!");
});

app.use("/api/auth", authRouter)

//middleware
app.use(express.json());
app.use(helmet());
app.use(morgan("common"));

You are not returning anything as a response if error happens. So, you probably had some error, and your server did not return anything to the client, resulting in buffering timed out .

You should return a response in /register endpoint in case of an error:

authRouter.get("/register", async (req, res) => {
  try {
    const user = await new User({
      username: "yessilyurt",
      email:"aaa@aa.com",
      usernickname: "Burak Yesilyurt",
      password: "123456",
    });
    await user.save();
    return res.send("user registered");
  } catch (err) {
    console.log(err);
    return res.status(400).json({ message: 'Can not register user.', error: err })
  }
});

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM