javascript - 模型未保存到 MongoDB

标签 javascript mongodb express

我正在开发一个练习 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;

每当我通过 Postman 传递数据时,我都会发送带有这样一个对象的 POST 请求: { “名称”:“测试1”, "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 的方式以及它如何解析数据的方式。

试试这个:

  1. 在 Postman 中,使用最常用的方法格式通过 POST 请求发送数据。这是:“raw”并将数据作为 application/json 发送。 postman post setup

  2. 在 API 端,确保您能够解析 application/json 请求。最常用的 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)

并记住验证主体:)

希望对你有帮助!

关于javascript - 模型未保存到 MongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57029466/

相关文章:

java - Mongodb中如何限制字段

javascript - 如何在 ng-bind-html 中呈现 Angular 变量的内容

javascript - 使用 d3 js 在 phant 中绘制 json 数据

javascript - jquery html() 不适用于 Chrome 中的定位元素

node.js - 在 Mongoose 中添加复杂的数据结构

node.js - 通过公共(public)Apache服务器访问服务器局域网中的node.js、mongo DB

javascript - 移动 safari 上的 touchMove 事件 - 导致整个页面被拖动

javascript - 无法使用 meteor 表单中的动态数组 id 更新 mongo 值

javascript - Express 未在本地主机上监听 :3000

node.js - Node Express - 无法 POST/错误