#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. И это решило проблему. Я точно не знаю, почему это произошло, но теперь ошибка исчезла. Спасибо.