HTTP-запросы в Express / MongoDB возвращают хешированный идентификатор и нулевое значение вместо объекта JSON - PullRequest
0 голосов
/ 01 марта 2019

Когда я отправляю запрос HTTP POST в базу данных моего плана, я получаю ответ об успешном завершении, но созданный объект выглядит следующим образом:

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

Когда он должен выглядеть следующим образом:

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

Я попытался создать первый план в Почтальоне, который, казалось, был успешным, но по какой-то причине, когда я попытался получить план (запрос GET к 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");
});

А вот мой файл Plan Model

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

Я работаю в Mac OS Mojaveи соответственно обновил homebrew, xcode и mongo.

1 Ответ

0 голосов
/ 01 марта 2019

Этот хэшированный идентификатор - это ObjectID, а __v - это флаг версии документа, заполненного средой mongoose.

Я вижу, что вы передаете req.body в конструктор Plan, что является плохой практикой, поскольку вы можетестать жертвой инъекции NoSQL.Проверьте свое тело перед созданием моделей.

В любом случае, похоже, ваш код должен работать.Я вижу, что ваше имя_плана и поля доступа в схеме не обязательны, поэтому, вероятно, mongoose не может найти их в объекте req.body и молча проглотит его.

Убедитесь, что ваше тело запроса и промежуточное ПО для анализа типа контентаЭкспресс настроен правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...