Не удалось обновить значения документа Mlab с помощью mongoose, он сохраняется как «__v»: 0 - PullRequest
0 голосов
/ 13 января 2019

Я новичок в узле и mongoDb, У меня есть учетная запись dong Монго, где я создал коллекцию под названием "dbTestData"

My Mongo DB Screen Shot

Я пытаюсь создать операцию CRUD, используя node express mongoose и express, и я использую почтальон, чтобы получить пост обновления и удалить значения в mlab db.

Мой вызов Get работает нормально, но когда я пытаюсь опубликовать значения в формате Json,

enter image description here

Я получаю сообщение об успехе, но когда я проверяю БД, оно сохраняется как

{
    "_id": {
        "$oid": "5c3ad1c19bc5932f800d26f7"
    },
    "__v": 0
}

My app.js

const express = require('express');

const bodyParser = require("body-parser");
const mongoose=require('mongoose');
const app = express();
const dbTestData=require('./models/post')
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));


mongoose.connect("mongodb://<userName>:<password>@ds221242.mlab.com:21242/kiitasklist").then(()=>{
  console.log("hello");
}).catch(
  ()=>{
    console.log("heee");
  });

app.use((req, res, next) => {
    res.setHeader("Access-Control-Allow-Origin", "*");
    res.setHeader(
      "Access-Control-Allow-Headers",
      "Origin, X-Requested-With, Content-Type, Accept"
    );
    res.setHeader(
      "Access-Control-Allow-Methods",
      "GET, POST, PATCH, PUT,DELETE, OPTIONS"
    );
    next();
  });

  app.post("/api/posts", (req, res, next) => {
    const post = new dbTestData({
      id:req.body.id,
      name:req.body.name
    });
    post.save().then(documents=>{
      console.log(post);
      res.status(201).json({
        message: 'Post added successfully'
      });
    });
  });


app.get("/api/posts",(req,res,next)=>{
  dbTestData.find().then(documents=>{
  res.status(200).json({
    message:'Posts fetched successful',
    posts:documents
    });
});
});


app.put("/api/posts/:id",(req,res,next)=>{
  const post = new dbTestData({
    _id:req.body._id,
    name:req.body.name
  });
  dbTestData.updateOne({_id:req.params.id},post).then(result=>{
    res.status(200).json({message:"update successfully"});
  });
});

app.delete("/api/posts/:id",(req,res,next)=>{
  dbTestData.deleteOne({_id:req.params.id}).then(documents=>{
     res.status(200).json({
       message:'posts fetched successful',
       posts:documents
     });
   });
});

module.exports = app;

My Server.js

const http = require('http');
const app = require('./api/app');

const port = process.env.PORT || 3000;

const server = http.createServer(app);

server.listen(port);

Мой post.js, где я создал схему мангуста

const mongoose=require('mongoose');

var Schema = mongoose.Schema; 
module.exports= mongoose.model("dbTestData", new Schema({}), "DbTestData"); 

работает как get, так и delete, Но post и put не выполняются должным образом, они возвращают сообщение об успехе в моей консоли, но пустое значение, например

{
    "_id": {
        "$oid": "5c3ad1c19bc5932f800d26f7"
    },
    "__v": 0
}

сохраняется во время POST и ничего не происходит во время PUT.

1 Ответ

0 голосов
/ 13 января 2019

Для решения этой проблемы пост

var Schema = mongoose.Schema; 

PostSchema = new Schema({
 id:Number,
 name: String
});
// the compile the model using mongoos model function giving the schema u created
const Post = module.exports= mongoose.model("dbTestData", PostSchema, "DbTestData");

после этого в вашем посте req сделай так

//before posting you need to require the model first 
const Post = require('./models/post'); // your post.js
app.Post("/api/posts", (req, res, next) => {
    const post = new Post({
      id:req.body.id,
      name:req.body.name
    });
    post.save().then(documents=>{
      console.log(post);
      res.status(201).json({
        message: 'Post added successfully'
      });
    });
  });

убедитесь, что вы правильно создали / определили свою схему, чтобы сохранить данные, используя ее. после того, как этот путь будет таким же, как у вас, он должен работать нормально после того, как вы правильно определите свою схему

и, наконец, попробуйте это тоже. убедитесь, что вы добавили эти буксировочные линии точно так же, как я дал в вашем случае, вы сделали их переключенными

// Body Parser Middleware
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
...