Javascript MongoDB在发出POST请求时返回空的错误对象

Javascript MongoDB在发出POST请求时返回空的错误对象,javascript,mongodb,express,mongoose,postman,Javascript,Mongodb,Express,Mongoose,Postman,我目前正在学习API。我正在使用RESTful的MERN API。我设置了路由,可以成功连接到MongoDB数据库。但是,当试图在DB的post上调用save()时,返回了我的错误消息,一个JSON对象,其中包含err,但我的err对象完全为空 posts.js: const express=require('express'); const router=express.router(); const Post=require('../models/Post'); 路由器.get(“/”,(请

我目前正在学习API。我正在使用RESTful的MERN API。我设置了路由,可以成功连接到MongoDB数据库。但是,当试图在DB的post上调用
save()
时,返回了我的错误消息,一个JSON对象,其中包含
err
,但我的
err
对象完全为空

posts.js:

const express=require('express');
const router=express.router();
const Post=require('../models/Post');
路由器.get(“/”,(请求,res)=>{
res.send('weareon/posts!');
}); 
路由器.post(“/”,(请求,res)=>{
const post=新职位({
标题:req.body.title,
desc:req.body.desc,
}); 
post.save()
。然后(数据=>{
res.json(数据);
})
.catch(错误=>{
res.json({message:err});
});
}); 
module.exports=路由器;
app.js:

const express=require('express');
const mongoose=require('mongoose');
const bodyParser=require('body-parser');
需要('dotenv/config');
常量app=express();
常数端口=8080;
use(bodyParser.json());
//进口路线------------------
const postsRoute=require(“./routes/posts”);
应用程序使用('/posts',postsRoute);
//路线--------------------------------
应用程序获取(“/”,(请求,请求)=>{
res.send('我们到家了!');
}); 
猫鼬连接(
process.env.DB_CONN,
{useNewUrlParser:true},
() => {
console.log('成功连接到数据库!')
}); 
app.listen(端口);
Post.js(模式):

const mongoose=require('mongoose');
const PostSchema=mongoose.Schema({
标题:{
类型:字符串,
要求:正确,
}, 
描述:{
类型:字符串,
要求:正确,
}, 
日期:{
类型:日期,
默认值:Date.now,
}
}); 
module.exports=mongoose.model('Posts',PostSchema);
我的帖子请求和回复(邮递员):

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


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

当您想像这样使用res时,请使用status:

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}); 
    }
}); 
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);
  }
} 
为了成功的结果

res.status(200).json(data); 
对于
.catch

res.status(500).json({ message: err }); 
但我更喜欢将
async/await
try/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}); 
    }
}); 
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);
  }
} 
检查mongnoos的承诺

检查猫鼬的连接,如下所示:

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

如果
成功连接到数据库打印猫鼬连接正常

好的,谢谢,我做到了。我听到Dev Ed在他的视频中谈到了这一点,但他试图让教程保持简单。不过谢谢你。知道它为什么不起作用吗?我已经更新了答案,请检查是的,我将尝试您的async/await方法,因为exec()返回一个错误,Node会关闭服务器!在async/await方法中,在catch befor res.status()中设置一个console.log(error)并显示错误?好的,使用promise方法,我得到“TypeError:post.save(…).exec不是函数”,使用try…catch我得到“10000ms后超时”错误。可能是因为我的数据库在美国北部托管,而我在美国南部托管(时间太长)?