2017-10-30 13 views
0

クライアントが投稿できるAPIエンドポイントとコメントを取得するAPIエンドポイントを作成しました。コメントの入力と削除APIエンドポイント - Express MongoDB/Mongoose

変更したいコメントのIDと削除する最終エンドポイントを指定することで、クライアントが既存のコメントを更新できるようにする別のAPIエンドポイントを作成しようとしています。これまでに作成したものを次に示します。

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; 
+0

あなたの質問はありますか? –

+0

PUTとDELETEエンドポイントはどのように記述しますか? – CodeBananas

答えて

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の機能があります。したがって、次のようになります。

+0

この最後の作品がありがとう! – CodeBananas

関連する問題