重要编辑:
我的代码没有问题,问题出在我的连接上,我的工作网络阻塞了它,我不知道为什么,我用电话连接来解决它。我会调查一下。
原始消息:
我正在尝试使用Express,Mongoose和MongoDB Atlas数据库制作一个NodeJS API,如果您想知道的话,我对Javascript的学习程度就像是初学者/中级。
我正在学习本教程:https://youtu.be/vjf774RKrLc?t=2159,但他使用的是MLab而不是MongoAtlas,我试图将我的代码修改为它。
因此,我在视频中发布的文章是我遇到麻烦的地方。他的帖子正在工作,但是我什么也没做,我从PostMan收到此错误“无法得到任何回复”
因此,当我尝试发布信息时,我的article.save()
无法正常工作,而且我不知道自己在哪里出错。因此,请查看它,这里有我不同的文件,目前没有太多代码,所以我要发布整个文件。
app.js:
const express = require('express');
const app = express();
const mongoose = require('mongoose');
require('dotenv/config');
//simplify us the use of json objects and encoded urls with special characters
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
//Import routes
const articlesRoute = require('./routes/articles.js');
//url redirections
// link to .../articles will be dealt with articlesRoute
app.use('/articles', articlesRoute);
//Home page of the API
app.get('/', (req, res) => {
res.send('We are at home!')
});
//database connection
mongoose.connect(
process.env.DB_CONNECTION,
{ dbName: 'test', useNewUrlParser: true, useUnifiedTopology: true },
() => {
console.log("Connected to db");
}
);
//listening port
app.listen(3000);
articles.js:
const express = require('express');
const router = express.Router();
const Article = require('../models/Article');
router.get('/', (req, res) => {
res.send('we are on articles');
});
router.post('/', async (req, res) => {
const article = new Article(req.body);
try {
console.log("try");
console.log(article);
const savedArticle = await article.save();
console.log(savedArticle);
res.json(savedArticle);
} catch (err) {
console.log("error :" + err)
res.json({ message: err })
};
});
module.exports = router;
Article.js:
const mongoose = require('mongoose');
const ArticleSchema = mongoose.Schema({
reference: {
type: String,
required: true
},
categorie: {
type: String,
required: true
},
description: {
type: String,
required: false
},
garantie: {
type: Number,
required: true
}
});
module.exports = mongoose.model('Articles', ArticleSchema);
我的“文章”对象具有数据,但是什么也没有发生,PostMan只需加载几分钟,然后我才能收到之前发布的消息。
我还尝试了PostMan建议的修复程序,但它没有任何改变。
感谢即将到来的答案。
编辑:
由于@SuleymanSah,我可以看到连接到数据库时出现错误:
{ Error: connect ECONNREFUSED there.Is.An.Ip.There at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1106:14) name: 'MongoNetworkError', errorLabels: [ 'TransientTransactionError' ], [Symbol(mongoErrorContextSymbol)]: {} }
但是我不明白为什么,如果有人有解决办法
答案 0 :(得分:1)
在dotenv文档中,需求如下:
require('dotenv').config();
您还可以像这样连接猫鼬,以便我们查看连接时是否有错误。
您可以尝试这些更改吗?
mongoose
.connect(process.env.DB_CONNECTION, { dbName: 'test', useNewUrlParser: true, useUnifiedTopology: true })
.then(() => console.log("Connected to db"))
.catch(err => console.log(`Could not Connected to db ${process.env.DB_CONNECTION} `, err));
编辑:
console.log(err)显示网络错误,因此修复它后,连接成功,并且该应用程序正常运行。
答案 1 :(得分:0)
可能您应该尝试在mongo db地图集中检查网络访问。并将IP白名单更改为允许从任何地方访问。