【问题标题】:MongooseError: Operation `tweets.insertOne()` buffering timed out after 10000msMongooseError:操作 `tweets.insertOne()` 缓冲在 10000 毫秒后超时
【发布时间】:2021-11-03 08:57:18
【问题描述】:

我正在尝试使用 mongodb 和 express 制作一个简单的 CRUD 应用程序,但是当我制作 create 方法时,我不断收到此错误,我已经尝试了所有方法。更改 DNS 服务器,我什至将数据库访问设置为允许从任何地方访问。但它似乎仍然不起作用。

对于互联网,我使用手机上数据蜂窝的热点绑定来连接互联网。

服务器可以运行,但是当我尝试使用邮递员向 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) => { //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, ()=>{ console.log(`Server is listening on port ${process.env.PORT}`)}))
.catch(err => 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) => {
        const author = req.body.author
        const text = req.body.text

        const Tweets = new Tweet({
            author,
            text
        })

        Tweets.save()
        .then(result => {
            res.status(201).json({
                desc: 'success'
            })
            next()
        })
        .catch((err)=>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.<anonymous> (/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'
}

谢谢,如果代码很难阅读,那我就不好了。我希望你能帮助我。

【问题讨论】:

  • 你不响应 /tweets 你应该定义函数来返回数据
  • /tweets 的路由在tweets router 上定义,并链接到控制器上的 createTweet 方法,该方法在 Tweets.save() 之后发送响应。但是,它给出了我在尝试发送发布请求时发送的错误。
  • 所以你在保存时遇到超时?
  • 我想是这样..因为我尝试在没有 Tweets.save() 的情况下运行该应用程序并且运行顺利。
  • 可能您与 mongo db 的连接失败了?

标签: node.js mongodb express mongoose mern


【解决方案1】:

更新: 我将互联网从使用手机的热点网络共享更改为普通的 WiFi 连接。它解决了这个问题。我不知道为什么会发生这种情况,但现在错误消失了。谢谢。

【讨论】:

    猜你喜欢
    • 2021-08-23
    • 2021-11-15
    • 2021-12-08
    • 2021-04-01
    • 2021-06-30
    • 2021-04-01
    • 2021-04-12
    • 2021-04-11
    • 2022-11-28
    相关资源
    最近更新 更多