简体   繁体   中英

MongoDB Returns Empty Error Object when Making POST Request

I'm currently learning about APIs. I'm using Dev Ed's video on a RESTful MERN API. I set up my routes and I could successfully connect to my MongoDB database. However, when attempting to call save() on a post to the DB, I was returned my error message, a JSON object with a message containing the err , but my err object was completely empty.

posts.js:

const express = require('express'); 
const router = express.Router(); 
const Post = require('../models/Post'); 

router.get('/', (req, res) => {
    res.send('We are on /posts!'); 
}); 

router.post('/', (req, res) => {
    const post = new Post({
        title: req.body.title, 
        desc: req.body.desc, 
    }); 

    post.save()
    .then(data => {
        res.json(data); 
    })
    .catch(err => {
        res.json({ message: err }); 
    });
}); 

module.exports = router; 

app.js:

const express = require('express'); 
const mongoose = require('mongoose'); 
const bodyParser = require('body-parser'); 

require('dotenv/config'); 

const app = express(); 
const PORT = 8080; 


app.use(bodyParser.json()); 

// Import Routes ------------------------ 
const postsRoute = require('./routes/posts'); 
app.use('/posts', postsRoute); 

// ROUTES --------------------------------
app.get('/', (req, res) => {
    res.send('We are home!'); 
}); 


mongoose.connect(
    process.env.DB_CONN, 
    { useNewUrlParser: true }, 
    () => {
    console.log('Succesfully connected to DB!')
}); 

app.listen(PORT); 

Post.js (schema):

const mongoose = require('mongoose'); 

const PostSchema = mongoose.Schema({
    title: {
        type: String, 
        required: true, 
    }, 
    desc: {
        type: String, 
        required: true, 
    }, 
    date: {
        type: Date, 
        default: Date.now, 
    }
}); 

module.exports = mongoose.model('Posts', PostSchema); 

My POST request and response (Postman): 我的 POST 请求和响应(邮递员)的图像。

In my code, I am attempting to send the new Post to my DB, but instead I get an error, an empty one. I either need to figure out how to view my error correctly (so that's it's not empty) or the larger problem: why my POST request is failing.

Again, I am learning about APIs, this is my very first time writing one. If there's anything I missed (like other code that you would need) or if there's something I should be doing differently, please, let me know! Thank you in advance!

use status when you want to use res like this:

for success result

res.status(200).json(data); 

for .catch

res.status(500).json({ message: err }); 

but I prefer use async/await with try/cacth like this:

router.post('/', async(req, res) => {
    const post = new Post({
        title: req.body.title, 
        desc: req.body.desc, 
    }); 
    try {
        let data = await post.save()
        res.status(200).json(data)
    } catch (error) {
        res.status(500).json({ message: error}); 
    }
}); 

check the documentation of promises in mongnoos

check the connection of mongoose like this:

const express = require('express'); 
const mongoose = require('mongoose'); 
const bodyParser = require('body-parser'); 

require('dotenv/config'); 

const app = express(); 
const PORT = 8080; 


app.use(bodyParser.json()); 

// Import Routes ------------------------ 
const postsRoute = require('./routes/posts'); 
app.use('/posts', postsRoute); 

// ROUTES --------------------------------
app.get('/', (req, res) => {
    res.send('We are home!'); 
}); 

runMongoose()

app.listen(PORT); 


async function runMongoose(){
  try {
    await mongoose.connect(
      process.env.DB_CONN, 
      { useNewUrlParser: true }
  ); 
    console.log("mongodb is OK");
  } catch (error) {
    console.log("mongodb Warning", error);
  }
} 

if Succesfully connected to DB! printed mongoose connection is OK

the problem is that you added

{ useNewUrlParser: true }

remove that and it's gonna work fine;)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM