放置和删除注释API端点 - Express MongoDB / Mongoose

时间:2017-10-30 13:59:58

标签: node.js mongodb express mongoose

我创建了一个客户端可以发布的API端点和一个检索注释的API端点。

我正在尝试创建另一个API端点,它允许客户端通过指定要更改的注释的ID以及要删除的最终端点来更新现有注释。这是我到目前为止创建的内容:

var express = require('express');
var router = express.Router();
var Comment = require('../models/comments');
/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});

/**
* Adds comments to our database */
router.post('/addComment', function(req, res, next) {
// Extract the request body which contains the comments
    comment = new Comment(req.body);
    comment.save(function (err, savedComment) {
    if (err) throw err;
    res.json({
    "id": savedComment._id
    }); 
});

});

/**
 * Returns all comments from our database
 */
router.get('/getComments', function(req, res, next) {
Comment.find({}, function (err, comments) { if (err)
res.send(err); res.json(comments);
}) });

module.exports = router;

1 个答案:

答案 0 :(得分:0)

以下是使用ES6语法的PUT和DELETE函数的示例。更新功能期望发布的正文中的标题和内容。你的看起来会有所不同。

module.exports.commentUpdateOne = (req, res) => {
  const { id } = req.params;

  Comment
    .findById(id)
    .exec((err, comment) => {
      let response = {};

      if (err) {
        response = responseDueToError(err);
        res.status(response.status).json(response.message);
      } else if (!comment) {
        response = responseDueToNotFound();
        res.status(response.status).json(response.message);
      } else {
        comment.title = req.body.title;
        comment.content = req.body.content;

        comment
          .save((saveErr) => {
            if (saveErr) {
              response = responseDueToError(saveErr);
            } else {
              console.log(`Updated commentpost with id ${id}`);
              response.status = HttpStatus.NO_CONTENT;
            }

            res.status(response.status).json(response.message);
          });
      }
    });
};

module.exports.commentDeleteOne = (req, res) => {
  const { id } = req.params;

  Comment
    .findByIdAndRemove(id)
    .exec((err, comment) => {
      let response = {};

      if (err) {
        response = responseDueToError(err);
      } else if (!comment) {
        response = responseDueToNotFound();
      } else {
        console.log('Deleted comment with id', id);
        response.status = HttpStatus.NO_CONTENT;
      }

      res.status(response.status).json(response.message);
    });
};

通常在REST API中使用PUT进行更新时,您必须提供整个文档的内容,甚至是您未更改的字段。如果省略一个字段,它将从文档中删除。在此特定示例中,更新功能需要标题和内容,因此您必须同时提供这两者。您可以根据需要编写更新逻辑。

路由器具有put和delete功能。所以它看起来像这样:

router
  .get('comment/:id', getFunction)
  .put('/comment/:id', putFunction)
  .delete('/comment/:id', deleteFunction);