【问题标题】:MongoDB Returns Empty Error Object when Making POST RequestMongoDB 发出 POST 请求时返回空错误对象
【发布时间】:2021-05-13 12:18:49
【问题描述】:

我目前正在学习 API。我在 RESTful MERN API 上使用 Dev Ed's video。我设置了我的路线,我可以成功连接到我的 MongoDB 数据库。但是,当尝试在数据库的帖子上调用 save() 时,我收到了错误消息,这是一个 JSON 对象,其中包含一条包含 err 的消息,但我的 err 对象完全为空。

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(架构):

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

我的 POST 请求和响应(邮递员):

在我的代码中,我试图将new Post 发送到我的数据库,但我得到一个错误,一个空的。我要么需要弄清楚如何正确查看我的错误(所以它不是空的)或者更大的问题:为什么我的 POST 请求失败。

再次,我正在学习 API,这是我第一次编写 API。如果有什么我错过的(比如你需要的其他代码)或者我应该做些不同的事情,请告诉我!提前谢谢!

【问题讨论】:

    标签: javascript mongodb express mongoose postman


    【解决方案1】:

    当你想像这样使用 res 时使用 status:

    成功的结果

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

    .catch

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

    但我更喜欢像这样使用async/awaittry/cacth

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

    在 mongnoos 中检查 documentation 的 promises

    像这样检查猫鼬的连接:

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

    如果Succesfully connected to DB!打印的猫鼬连接正常

    【讨论】:

    • 好的,谢谢,我做到了。我听到 Dev Ed 在他的视频中谈到了这个,但他试图让教程保持简单。不过谢谢。知道为什么它不起作用吗?
    • 是的,我会试试你的 async/await 方法,因为 exec() 返回错误并且 Node 会关闭服务器!
    • 在 async/await 方法中为 res.status() 在 catch 中设置一个 console.log(error) 并显示错误?
    • 好的,使用 promise 方法,我得到“TypeError: post.save(...).exec is not a function”并使用 try...catch 我得到一个“超时10000 毫秒后”错误。可能是因为我的数据库托管在美国北部而我在美国南部(耗时太长)?
    • exec with save 答案不正确,我删除了,但检查猫鼬的连接,是否使用 mongodb localy?
    猜你喜欢
    • 1970-01-01
    • 2011-10-11
    • 2021-04-24
    • 2021-12-19
    • 2021-12-12
    • 2021-04-11
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    相关资源
    最近更新 更多