javascript - 模型未保存到 MongoDB
问题描述
我正在开发一个练习 API 以习惯于创建模型和路由,但似乎无法获得将数据保存到 MongoDB 的第一条路由。
我从 PostMan 收到以下错误:
{
"message": {
"errors": {
"name": {
"message": "Path `name` is required.",
"name": "ValidatorError",
"properties": {
"message": "Path `name` is required.",
"type": "required",
"path": "name"
},
"kind": "required",
"path": "name"
},
"description": {
"message": "Path `description` is required.",
"name": "ValidatorError",
"properties": {
"message": "Path `description` is required.",
"type": "required",
"path": "description"
},
"kind": "required",
"path": "description"
}
},
"_message": "Universes validation failed",
"message": "Universes validation failed: name: Path `name` is required., description: Path `description` is required.",
"name": "ValidationError"
}
我的模型和路线如下所示:
const mongoose = require('mongoose');
const UniverseSchema = new mongoose.Schema({
name: {
type: String,
required: true
},
description: {
type: String,
required: true
},
date : {
type: Date,
default: Date.now
}
});
//export the route ---------------------Name in db , schema that it should use
module.exports = mongoose.model('Universes', UniverseSchema);
const express = require('express');
const router = express.Router();
const Universe = require('../models/Universe');
// Initial route that will render our universes page
router.get('/', async (req , res) => {
res.send('Universes Page');
try {
const universes = await Universe.find();
res.json(universes);
} catch (error) {
res.json({ message: error });
}
});
// Route use to create a universe
// Create async our post
router.post('/', async (req, res) => {
// Create an instance of the Universe model
const universe = new Universe({
name : req.body.name,
description : req.body.description
});
// Attempt to save our new universe with a try catch
try {
const savedUniverse = await universe.save()
res.json(savedUniverse);
console.log('saved');
} catch (error) {
res.json({ message: error});
console.log('Not saved');
}
});
module.exports = router;
每当我通过邮递员传递我的数据时,我都会发送一个带有这样一个对象的 POST 请求:{“name”:“test1”,“description”:“test description 1”} 这是我的 App.js 文件 - 包括正文 -解析器
//Server setup
const express = require('express');
const app = express();
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
require('dotenv').config();
//Middleware
app.use(bodyParser.json());
//index Route
app.get('/' , ( req , res ) => {
res.send('index');
});
// Import routes
const universeRoute = require('./routes/universes');
app.use('/universes', universeRoute );
//Connect to DB
mongoose.connect(process.env.DB_CONNECT,
{ useNewUrlParser: true } ,
() => {
console.log('Connected to DB');
});
app.listen(process.env.PORT || 5000);
感谢任何和所有的帮助。
解决方案
这很可能是您将数据发送到 API 的方式,以及它如何解析它。
尝试这个:
在 Postman 中,使用最常用的方法格式通过 POST 请求发送数据。这是:“原始”并将数据作为 application/json 发送。
在 API 端,确保您能够解析 application/json 请求。这个 withing Express 最常用的包是expressjs/body-parser
const mongoose= require('mongoose')
const express = require('express')
const bodyParser = require('body-parser')
const Universe = require('../models/Universe')
const app = express()
// Connect to MongoDB
mongoose.connect(/* MongoDB connection string */, /* Connection options */);
mongoose.connection.on('error', err => {
console.error('MongoDB connection error: ' + err)
process.exit(-1)
})
// parse JSON
app.use(bodyParser.json({ type: 'application/json' }))
// Initial route that will render our universes page
app.get('/', async (req , res) => {
res.send('Universes Page')
try {
const universes = await Universe.find()
res.json(universes)
} catch (error) {
res.json({ message: error })
}
});
// Route use to create a universe
// Create async our post
app.post('/', async (req, res) => {
// Create an instance of the Universe model
const universe = new Universe({
name : req.body.name,
description : req.body.description
})
// Attempt to save our new universe with a try catch
try {
const savedUniverse = await universe.save()
res.json(savedUniverse)
console.log('saved')
} catch (error) {
res.json({ message: error})
console.log('Not saved')
}
});
app.listen(3000)
并记得验证身体:)
希望能帮助到你!
推荐阅读
- prolog - 给定以下信息,定义以下每个 prolog 谓词
- java - 如何创建一个构造函数不能执行的函数?
- xml - 在 xsl 1.0 中查找每个图书馆的最大图书数量
- android - 打开从 Firebase 消息传递 FCM 收到的通知的特定自定义数据 URL 链接
- java - 处理这个特定问题中的循环
- php - format condition if else if and use the method inside only one time
- python - python脚本无法读取csvfile并出现错误-StopIteration
- ios - Swift - 在收到静默通知后执行代码
- stored-procedures - 调用使用链接服务器的存储过程的 SQL Server 代理作业不起作用
- python - 楼层功能与楼层划分的区别