Ошибка MongooseError: Время ожидания буферизации операции «tweets.insertOne ()» истекло через 10000 мс

#node.js #mongodb #express #mongoose #mern

Вопрос:

Я пытаюсь создать простое приложение CRUD с помощью mongodb и express, но когда я использую метод создания, я продолжаю получать эту ошибку, я перепробовал все. изменив DNS-сервер, я даже настроил доступ к базе данных так, чтобы он был разрешен из любого места. но, похоже, это все еще не работает.

Для Интернета я использую привязку точки доступа от data celluler на своем телефоне для подключения к Интернету.

сервер может работать, но когда я пытаюсь отправить какой-либо почтовый запрос с помощью почтальона на http://localhost:5000/v1/api/tweets/ он не отправляет никаких ответов, только ошибки

вот коды.

ГЛАВНОЕ — index.js

 const express = require('express') const dotenv = require('dotenv').config() const mongoose = require('mongoose')  const router = require('./routes') //const { connectToDb } = require('./config/db')  const app = express() app.use(express.json()) app.use(express.urlencoded());  app.use((req, res, next) =gt; { //set headers  res.setHeader('Access-Control-Allow-Origin','*')  res.setHeader('Access-Control-Allow-Methods','POST, GET, PUT, DELETE, OPTIONS')  res.setHeader('Access-Control-Allow-Headers', 'Content-Type')  next(); })  app.use('/v1/api/', router )  mongoose.connect(process.env.MONGO_URI, { useNewUrlParser: true, useUnifiedTopology: true }) .then(app.listen(process.env.PORT, ()=gt;{ console.log(`Server is listening on port ${process.env.PORT}`)})) .catch(err =gt; console.log(err))  

главный маршрутизатор

 const router = require("express").Router() const tweets = require('./tweets')  router.use('/tweets', tweets)  module.exports = router  

маршрутизатор твитов

 const router = require('express').Router() const { tweet } = require('../controllers')  router .post('/', tweet.createTweet)   module.exports = router  

контроллер твитов

 const Tweet = require('../schemas/TweetSchema')  module.exports = {  createTweet : (req, res, next) =gt; {  const author = req.body.author  const text = req.body.text   const Tweets = new Tweet({  author,  text  })   Tweets.save()  .then(result =gt; {  res.status(201).json({  desc: 'success'  })  next()  })  .catch((err)=gt;console.log(err))     }, }  

Схема твита

 const mongoose = require('mongoose') const Schema = mongoose.Schema const TweetSchema = new Schema({  author: {  type: String,  required: true  },  text: {  type: String,   required: true  } },{  timestamps: true })  module.exports = mongoose.model("Tweet", TweetSchema)  

сообщение об ошибке

 MongooseError: Operation `tweets.insertOne()` buffering timed out after 10000ms  at Timeout.lt;anonymousgt; (/mnt/d/Programming/Web Development/twimern/server/node_modules/mongoose/lib/drivers/node-mongodb-native/collection.js:149:23)  at listOnTimeout (node:internal/timers:557:17)  at processTimers (node:internal/timers:500:7) Error: queryTxt ETIMEOUT twimern.xdzes.mongodb.net  at QueryReqWrap.onresolve [as oncomplete] (node:dns:213:19) {  errno: undefined,  code: 'ETIMEOUT',  syscall: 'queryTxt',  hostname: 'twimern.xdzes.mongodb.net' }  

Спасибо, я виноват, если код довольно трудно прочитать. Я надеюсь, что вы сможете мне помочь.

Комментарии:

1. вы не отвечаете на /твиты, вы должны определить функцию для возврата данных

2. Маршруты для /твитов определены в tweets router , и он связан с методом createTweet на контроллере, который отправляет ответ после твитов.save(). Однако это выдает ошибку, которую я отправлял всякий раз, когда пытался отправить запрос на публикацию.

3. итак, вы столкнулись с таймаутом при сохранении ?

4. Я так думаю.. потому что я попробовал запустить приложение без Tweets.save (), и оно прошло гладко.

5. может быть, ваше соединение с базой данных mongo было прервано?

Ответ №1:

ОБНОВЛЕНИЕ : Я сменил подключение к Интернету с привязки точки доступа с помощью телефона на обычное подключение к Wi-Fi. И это решило проблему. Я точно не знаю, почему это произошло, но теперь ошибка исчезла. Спасибо.