2017-11-30 1 views
0

CRUD 옵션을 사용할 수있는 API를 만들려고합니다. 문제는 우리의 delete 함수 dosnt work입니다. 우리가 delete post를 클릭하면 사이트가 다운됩니다. 삭제를 시도 할 때 ERR_CONNECTION_REFUSED

는 (늘 정보 원인에 유래을 작성 날이 바보 같은 일을 게시 할 수 있습니다.)

var mongoose = require('mongoose'); 
    var express = require('express'); 
    var cors = require('cors'); 
    var bodyParser = require('body-parser'); 


    mongoose.connect("mongodb://localhost/shop"); 


    var Schema = mongoose.Schema; 

    var productSchema = new Schema({ 
     id: String, 
     name: String, 
     description: String, 
     origin: String, 
     categories: [{type: Schema.Types.ObjectId, ref: "Category"}] 
    }, {collection: 'product'}); 

    var categorySchema = new Schema({ 
    _id: Schema.Types.ObjectId, 
     name: String, 
     description: String, 
     products: [{type: Schema.Types.ObjectId, ref: "Product"}] 
    }, {collection: 'category'}); 

    var personSchema = new Schema({ 
     _id: Schema.Types.ObjectId, 
     name: String, 
     email: String, 
     phone: String 
     }, {collection: 'person'}); 

     var listSchema = new Schema({ 
     _id: Schema.Types.ObjectId, 
     name: String, 
     date: String, 
     product: [String] 
     }, {collection: 'list'}); 

    var Product = mongoose.model('Product', productSchema); 
    var Category = mongoose.model('Category', categorySchema); 
    var Person = mongoose.model('Person', personSchema); 
    var List = mongoose.model('List', listSchema); 


    var app = express(); 
    app.use(cors()); 
    app.use(bodyParser.json()); 
    app.use(bodyParser.urlencoded({ extended: true })); 

    /* Get */ 

    app.get('/', function(req,res){ 
     Product.find({}, '', function(error, product){ 
      Person.find({},'', function(error, person){ 
       Category.find({},'', function(error, category){ 
        List.find({},'', function(error, list){ 
         res.json({ 
          Product: product, 
          Person: person, 
          Category: category, 
          List: list 
         }); 
        }); 
       }); 
      }); 
     }); 
    }); 



    app.post("/product", function(req, res) { 
     var newItem = new Product (req.body); 
     newItem.save() 
      .then (function(product) { 
       Category.findByIdAndUpdate(
       req.body.categories, { $push: {"products": product._id }}, { new: true }, function (err, product) { 
        res.send(product); 
      }) 
      .catch (function(err) { 
       res.status(400).send("unable to add item to db"); 
      }); 
     }); 
    }); 



    app.get('/all', function(req,res){ 
     Category. 
      find({}). 
      populate("products"). 
      exec(function (err, product) { 
       res.json(product); 
      }); 
    }); 

    app.get('/category/:id', function(req,res){ 
     Category. 
      find({_id: mongoose.Types.ObjectId(req.params.id)}). 
      populate("products"). 
      exec(function (err, product) { 
       res.json(product); 
      }); 
    }); 

    app.get('/category/1', function(req,res){ 
     Category. 
      find({name: "grönsaker"}). 
      populate("products"). 
      exec(function (err, product) { 
       res.json(product); 
      }); 
    }); 

    app.get('/category/2', function(req,res){ 
     Category. 
      find({name: "mejeri"}). 
      populate("products"). 
      exec(function (err, product) { 
       res.json(product); 
      }); 
    }); 










    app.put('/product/:id', function(req, res) { 
     Product.findByIdAndUpdate(req.params.id, { $set: req.body }, { new: true }, function (err, product) { 
      if (err) return handleError(err); 
      res.send(product); 
      }); 
    }); 

    /

    app.delete('/product', function (req, res) { 
     Category.findById(req.body._id, function (err, product) { 
      var cat_id = Product.categories [0] 
      Category.findByIdAndUpdate(cat_id, { $pull: {products: req.body._id}}, function(err, product){ 
       product.remove(); 
      }); 
     }); 
    }); 

    app.listen(3000); 

우리는 SendDeleteRequest이 ID 잘못된 것을 알고 있지만, 우리는 우리가 대신 작성해야 모르겠어요.

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Express.js client</title> 
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
     <script> 

     function sendGetRequest() { 
     var data = { id: 123 }; 
     $.ajax({ 
      url: "http://localhost:3000/all", 
      type: "GET", 
      data: data, 
      success: response => $("#response").text(JSON.stringify(response)) 
     }); 
     } 

     function sendGetGronsaker() { 
     var data = { id: "5a1696d69759edba95fa4b18" }; 
     $.ajax({ 
      url: "http://localhost:3000/category/5a1696d69759edba95fa4b18", 
      type: "GET", 
      data: data, 
      success: response => $("#response").text(JSON.stringify(response)) 
     }); 
     } 

     function sendGetMejeri() { 
     var data = { id: "5a1696d69759edba95fa4b17" }; 
     $.ajax({ 
      url: "http://localhost:3000/category/5a1696d69759edba95fa4b17", 
      type: "GET", 
      data: data, 
      success: response => $("#response").text(JSON.stringify(response)) 
     }); 
     } 

     /* function sendGetGronsaker() { 
     var data = { id: "5a1696d69759edba95fa4b18" }; 
     $.ajax({ 
      url: "http://localhost:3000/category/5a1696d69759edba95fa4b18", 
      type: "GET", 
      data: data, 
      success: response => $("#response").text(JSON.stringify(response)) 
     }); 
     } */ 

     function sendPostRequest() { 
      var data = { name: "majs", description: "Majs är gott", origin: "spain", categories: "5a1696d69759edba95fa4b18" }; 
      $.ajax({ 
       url: "http://localhost:3000/product", 
       type: "POST", 
       data: JSON.stringify(data), 
       contentType: "application/json; charset=utf-8", 
       success: response => $("#response").text(JSON.stringify(response)) 
      }); 
     } 

     function sendPutRequest() { 
      var data = { origin: "spain" }; 
      $.ajax({ 
       url: "http://localhost:3000/product/5a1696d79759edba95fa4b20", 
       type: "PUT", 
       data: JSON.stringify(data), 
       contentType: "application/json; charset=utf-8", 
       success: response => $("#response").text(JSON.stringify(response)) 
      }); 
     } 

     function sendDeleteRequest() { 
      var data = { id: 789 }; 
      $.ajax({ 
       url: "http://localhost:3000/product", 
       type: "DELETE", 
       data: data, 
       success: response => $("#response").text(response) 
      }); 
     } 
     </script> 
     <style type="text/css"> 
     #output { 
      margin-bottom: 3ex; 
     } 

     #label { 
      font-weight: bold; 
     } 
     </style> 
    </head> 
    <body> 
     <div id="output"> 
      <span id="label">Server response:</span> 
      <span id="response"></span> 
     </div> 

     <div> 
      <button onclick="sendGetMejeri()">GET Mejeri</button> 
      <button onclick="sendGetGronsaker()">GET Gronsaker</button> 
      <button onclick="sendGetRequest()">GET All</button> 
      <button onclick="sendPostRequest()">Send POST request</button> 
      <button onclick="sendPutRequest()">Send tomat PUT request</button> 
      <button onclick="sendDeleteRequest()">Send DELETE request</button> 
     </div> 
    </body> 
</html> 

답변

0

당신은 그냥 req.body을 변경 밑줄 문자

없이 ID 매개 변수를 전달하고 있습니다. _id to req.body. id

app.delete('/product', function (req, res) { 
    Category.findById(req.body.id, function (err, product) { 
     var cat_id = Product.categories [0] 
     Category.findByIdAndUpdate(cat_id, { $pull: {products: req.body.id}}, function(err, product){ 
      product.remove(); 
     }); 
    }); 
}); 
관련 문제