Сообщение не работает в моем API nodejs для MongoDB Atlas с Mongoose - PullRequest
0 голосов
/ 17 октября 2019

ВАЖНОЕ РЕДАКТИРОВАНИЕ:

В моем коде нет ничего плохого, проблема связана с моим соединением, моя сеть на работе блокирует его. Я не знаю почему, я использовал свое телефонное соединениечтобы понять это. Я посмотрю на это.

Исходное сообщение:

Я пытаюсь создать API-интерфейс NodeJS, используя Express, Mongoose с базой данных MongoDB Atlas и мой уровень с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);

article.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);

Мой объект 'article' содержит данные, но ничего не происходит, 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)]: {} }

Но я не понимаю, почему, если у кого-то есть решения thx

1 Ответ

1 голос
/ 17 октября 2019

В dotenv docs требование выглядит следующим образом:

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));

EDIT:

console.log (err) обнаружил сетевую ошибку, поэтому после исправления соединение установилось успешно, и приложение работало.

...