【发布时间】: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