マングースとRESTのAPI
REST APIサーバーでは、フロントエンドの各々からの要求をバックエンド・データベース操作に対応しています。
たとえば、に応じてGET
、データベース内のデータ検索のための要求:処理終了するためにGET
、クライアントのからの要求GET
の要求を、クライアントの試行がデータ取得するためにサーバーにアクセスすることを意味するので、数Expressサービスによって処理されることを、あなたは、データベースのクエリ操作でのビジネスロジックを実行する必要があります。クエリを開始し、データベースからの文書のセットを取得した後、戻ってサーバに送信される応答メッセージに変換します。
したがって、処理終了要求応答は二つの部分、1つのビジネスロジック、データベースと部分が相互作用を含みます。
見てPOST
要求:
POST
処理後、体細胞エクスプレス・サーバに要求することによって要求情報は、対応する要求の開始create
のMongoDBへの要求は、create
要求はデータベースになりcollection
、新しいを作成するためにdocument
、格納要求の本体情報は、その中に処理されます。最後に、クライアントへの応答の背面に操作の結果。
だから、GET、PUT、POSTまたはDELETEのいずれかの、いずれかの操作のREST APIエンド実行するために、バックグラウンドで対応するデータベース操作を開始します。つまり、HTTPクライアントは、RESTのAPIリクエストは、対応するデータベース操作にマッピングする必要があり受け取ります。
変更dishRouter.js
const express = require('express')
const bodyParser = require('body-parser')
const mongoose = require('mongoose')
const Dishes = require('../models/dishes')
const dishRouter = express.Router()
dishRouter.use(bodyParser.json())
dishRouter.route('/')
.get((req, res, next) => {
Dishes.find({})
.then((dishes) => {
res.statusCode = 200
res.setHeader('Content-Type', 'application/json')
res.json(dishes)
}, (err) => next(err))
.catch((err) => next(err))
})
.post((req, res, next) => {
Dishes.create(req.body)
.then((dish) => {
console.log('Dish Created ', dish)
res.statusCode = 200
res.setHeader('Content-Type', 'application/json')
res.json(dish)
}, (err) => next(err))
.catch((err) => next(err))
})
.put((req, res, next) => {
res.statusCode = 403
res.end('PUT operation not supported on /dishes')
})
.delete((req, res, next) => {
Dishes.reomve({})
.then((resp) => {
res.statusCode = 200
res.setHeader('Content-Type', 'application/json')
res.json(resp)
}, (err) => next(err))
.catch((err) => next(err))
})
dishRouter.route('/:dishId')
.get((req, res, next) => {
Dishes.findById(req.params.dishId)
.then((dish) => {
res.statusCode = 200
res.setHeader('Content-Type', 'application/json')
res.json(dish)
}, (err) => next(err))
.catch((err) => next(err))
})
.post((req, res, next) => {
res.statusCode = 403
res.end('POST operation not supported on /dishes/' + req.params.dishId)
})
.put((req, res, next) => {
res.statusCode = 200
Dishes.findByIdAndUpdate(req.params.dishId, {
$set: req.body
}, {
new: true // 返回改变后的document
})
.then((dish) => {
res.statusCode = 200
res.setHeader('Content-Type', 'application/json')
res.json(dish)
}, (err) => next(err))
.catch((err) => next(err))
})
.delete((req, res, next) => {
Dishes.findByIdAndRemove(req.params.dishId)
.then((resp) => {
res.statusCode = 200
res.setHeader('Content-Type', 'application/json')
res.json(resp)
}, (err) => next(err))
.catch((err) => next(err))
})
dishRouter.route('/:dishId/comments')
.get((req, res, next) => {
Dishes.findById(req.params.dishId)
.then((dish) => {
if (dish != null) {
res.statusCode = 200
res.setHeader('Content-Type', 'application/json')
res.json(dish.comments)
} else {
err = new Error('Dish' + req.params.dishId + ' not found')
err.status = 404
return next(err)
}
}, (err) => next(err))
.catch((err) => next(err))
})
.post((req, res, next) => {
Dishes.findById(req.params.dishId)
.then((dish) => {
if (dish != null) {
dish.comments.push(req.body)
dish.save()
.then((dish) => {
res.statusCode = 200
res.setHeader('Content-Type', 'application/json')
res.json(dish)
}, (err) => next(err))
} else {
err = new Error('Dish ' + req.params.dishId + ' not found')
err.status = 404
return next(err)
}
}, (err) => next(err))
.catch((err) => next(err))
})
.put((req, res, next) => {
res.statusCode = 403
res.end('PUT operation not supported on /dishes/' + req.params.dishId + '/comments')
})
.delete((erq, res next) => {
Dishes.findById(req.params.dishId)
.then((dish) => {
if (dish != null) {
for (let i = (dish.comments.length - 1); i >= 0; i--) {
dish.comments.id(dish.comments[i]._id).remove()
}
dish.save()
.then((dish) => {
res.statusCode = 200
res.setHeader('Content-Type', 'application/json')
res.json(dish)
}, (err) => next(err))
} else {
err = new Error('Dish ' + req.params.dishId + ' not found')
err.status = 404
return next(err)
}
}, (err) => next(err))
.catch((err) => next(err))
})
dishRouter.route('/:dishId/comments/:commentId')
.get((req, res, next) => {
Dishes.findById(req.params.dishId)
.then((dish) => {
if (dish != null && dish.comments.id(req.params.commentId) != null) {
res.statusCode = 200
res.setHeader('Content-Type', 'application/json')
res.json(dish.comments.id(req.params.commentId))
} else if(dish == null) {
err = new Error('Dish ' + req.params.dishId + ' not found')
err.statusCode = 404
return next(err)
} else {
err = new Error('Comment ' + req.params.commentId + ' not found')
res.statusCode = 404
return next(err)
}
}, (err) => next(err))
.catch((err) => next(err))
})
.post((req, res, next) => {
res.statusCode = 403
res.end('POST operation not supported on /dishes/' + req.params.dishId + '/comments/' + req.params.commentId)
})
.put((req, res, next) => {
Dishes.findById(req.params.dishId)
.then((dish) => {
if (dish != null && dish.comments.id(req.params.commentId) != null) {
if (req.body.rating) {
dish.comments.id(req.params.commentId).rating = req.body.rating
}
if (req.body.comment) {
dish.comments.id(req.params.commentId).comment = req.body.comment
}
dish.save()
.then((dish) => {
res.statusCode = 200
res.setHeader('Content-Type', 'application/json')
res.json(dish)
}, (err) => next(err))
} else if (dish == null) {
err = new Error('Dish ' + req.params.commentId + ' not found')
err.statusCode = 404
return next(err)
} else {
err = new Error('Comment ' + req.params.commentId + ' not found');
err.status = 404;
return next(err);
}
}, (err) => next(err))
.catch((err) => next(err));
})
.delete((req, res, next) => {
Dishes.findById(req.params.dishId)
.then((dish) => {
if (dish != null && dish.comments.id(req.params.commentId) != null) {
dish.comments.id(req.params.commentId).remove()
dish.save()
.then((dish) => {
res.statusCode = 200
res.setHeader('Content-Type', 'application/json');
res.json(dish)
}, (err) => next(err))
} else if (dish == null) {
err = new Error('Dish ' + req.params.dishId + ' not found');
err.status = 404
return next(err)
} else {
err = new Error('Comment ' + req.params.commentId + ' not found');
err.status = 404
return next(err)
}
}, (err) => next(err))
.catch((err) => next(err))
})
module.exports = dishRouter