Py学习  »  MongoDB

Express/MongoDB中的HTTP请求返回散列id和值0,而不是JSON对象

Matt Croak • 5 年前 • 1375 次点击  

{
    "_id": "5c791ef4f80cfba4379987f1",
    "__v": 0
}

当它看起来像这样时:

{
   "plan_name": 'first plan',
   "plan_access": 1
}

我试图在Postman中创建第一个计划,这似乎是成功的,但由于某些原因,当我尝试检索计划时(GET request to mongodb://127.0.0.1:27017/plans {"_id": "...", "__v": 0}

这是我的server.js文件

const express = require("express");
const app = express();
const bodyParser = require("body-parser");
const cors = require("cors");
const mongoose = require("mongoose");
const planRoutes = express.Router();
const PORT = 4000;

let Plan = require('./models/plan.model');

app.use(cors());
app.use(bodyParser.json());

mongoose.connect('mongodb://127.0.0.1:27017/plans', {useNewUrlParser: 
true});

const connection = mongoose.connection;

connection.once('open', function(){
   console.log("MongoDB database connection established successfully");
});

planRoutes.route('/').get(function(req, res){
   Plan.find(function(err, plans){
     if(err){
       console.log(err);
     } else {
       console.log(plans)
       res.json(plans)
     }
  });
});

planRoutes.route('/:id').get(function(req, res){
  Plan.findById(req.params.id, function(err, plan){
    if(err){
      console.log(err);
    } else {
      res.json();
    }
  });
 });

 planRoutes.route('/add').post(function(req, res){
   let plan = new Plan(req.body);
   plan.save()
       .then(plan=>{
           res.status(200).json({'plans': 'Plan made successfully'});
       })
       .catch(err=>{
          res.status(400).send('Plan made failed')
       });
  });

  planRoutes.route('/update/:id').post(function(req, res){
     Plan.findById(req.params.id, function(err, plan){
       if(!plan){
        res.status(404).send('data not found');
       } else {
       plan.plan_name = req.body.plan_name;
       plan.access = req.body.plan_access;

       plan.save().then(plan=>{
          res.json('Update successful');
       })
       .catch(err=>{
           res.status(400).send('Update failed');
       });
    }
 });
});

app.use('/plans', planRoutes);

app.listen(PORT, function(){
    console.log("server started on port: " + PORT + " teehee");
});

这是我的计划模型文件

const mongoose = require("mongoose");
const Schema = mongoose.Schema;

let Plan = new Schema({
  plan_name:{
    type: String
  },
  access:{
    type: Number //from 1 to 3
  },
}) 

module.exports = mongoose.model('Plan', Plan);

我正在开发MacOSMojave,并相应地更新了homebrew、xcode和mongo。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/53993
 
1375 次点击  
文章 [ 1 ]  |  最新文章 5 年前
Vladyslav Usenko
Reply   •   1 楼
Vladyslav Usenko    6 年前

这个散列id是ObjectID,\uu v是文档的版本标志,由mongoose框架填充。

不管怎样,看起来你的代码应该可以工作。我看到模式中的plan_name和access字段不是必需的,所以可能mongoose在req.body对象中找不到它们,并且会悄悄地将其吞入。

请确保正确设置了express的请求正文和内容类型解析中间件。