使用Mongoose将无法在我的nodejs API中发布到MongoDB Atlas

时间:2019-10-17 11:57:55

标签: node.js mongodb express mongoose mongodb-atlas

重要编辑:

我的代码没有问题,问题出在我的连接上,我的工作网络阻塞了它,我不知道为什么,我用电话连接来解决它。我会调查一下。

原始消息:

我正在尝试使用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)]: {} }

但是我不明白为什么,如果有人有解决办法

2 个答案:

答案 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白名单更改为允许从任何地方访问。