MongoDB Node Express GET и DELETE работают, а не POST? - PullRequest
0 голосов
/ 21 февраля 2020

GET работает. DELETE работает.

Не могу понять, почему POST не будет работать с чем-то простым.

{"akey":"avalue"}

Использование почтальона для проверки. Сообщение от Почтальона: «Не удалось получить ответ», что странно, потому что у меня нет проблем с GET и DELETE.

Новое в Mongo / Node. После учебника Брэда Траверси https://www.youtube.com/watch?v=j55fHUJqtyw на Vue, Пн go, Express, Узел.

Что-нибудь выделяется?

const express = require( 'express' );
const mongodb = require( 'mongodb' );

const router = express.Router();

// GET POSTS
router.get( '/', async ( req, res ) => {
    const posts = await loadPostsCollection();
    res.send( await posts.find( {} ).toArray() );
} );

// ADD POST
router.post( '/', async ( req, res ) => {
    const posts = await loadPostsCollection();
    await posts.insertOne( {
                               text: req.body.text
                           } );
    res.status(201).send();
} );

// DEL POST
router.delete('/:id', async (req, res)=>{
    const posts = await loadPostsCollection();
        await posts.deleteOne({_id: new mongodb.ObjectID(req.params.id)});
        res.status(200).send();
})

async function loadPostsCollection() {
    const client = await mongodb.MongoClient.connect( 'mongodb+srv://someUser:somePassword@some-bkebp.mongodb.net/test?retryWrites=true&w=majority', {
        useNewUrlParser   : true,
        useUnifiedTopology: true
    } );
    return client.db( 'someDB' ).collection( 'somCollection' )
}

module.exports = router;

Ответы [ 2 ]

2 голосов
/ 21 февраля 2020

Причина

Кажется, что ваш await posts.insertOne({ text: req.body.text }); никогда не заканчивается (или падает, и express не отвечает), поэтому почтальон никогда не получает ответ.

Попробуйте console.log ing после вашего await, чтобы увидеть, является ли это root причиной проблемы.

Возможное решение

Попробуйте что-то таким образом обработать ошибки в ваших запросах БД

router.post('/', async (req, res) => {
  try {
    const posts = await loadPostsCollection();
    await posts.insertOne({
      text: req.body.text
    });
    res.status(201).send(); // You may need to answer something here
  } catch (e) {
    console.error(e);
    return res.status(500).end() // 500 is INTERNAL SERVER ERROR
  }
});
1 голос
/ 21 февраля 2020

Если вы можете поместить некоторые логи c для обработки ошибок, там может быть полезная информация.

// ADD POST
router.post( '/', async ( req, res ) => {
    const posts = await loadPostsCollection();
    await posts.insertOne( {
                           text: req.body.text
                       })
    .then(result => if (result) res.status(201).send());  // handle success case
    .catch(err => { //see what the error is
        console.error; 
        res.status(500)
        res.render('error', { error: err })
        })
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...