Javascript MongoDB在发出POST请求时返回空的错误对象
我目前正在学习API。我正在使用RESTful的MERN API。我设置了路由,可以成功连接到MongoDB数据库。但是,当试图在DB的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(“/”,(请
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后超时”错误。可能是因为我的数据库在美国北部托管,而我在美国南部托管(时间太长)?