From 8255ec05b96f65ec526e5ec8ed324594ace93cf2 Mon Sep 17 00:00:00 2001 From: Stepan Usatiuk Date: Thu, 17 May 2018 12:13:14 +0300 Subject: [PATCH] remove lists --- app.js | 22 ++++++++++++++-------- errors/index.js | 9 +++++++++ package.json | 2 +- routes/lists.js | 19 +++++++++++++++++++ 4 files changed, 43 insertions(+), 9 deletions(-) create mode 100644 errors/index.js diff --git a/app.js b/app.js index 6273ae6..49fa15d 100644 --- a/app.js +++ b/app.js @@ -44,15 +44,21 @@ app.use((req, res) => { }); // handle errors -app.use((err, req, res, next) => { - if (err.name === 'ValidationError') { - res.status(400); - res.json({ success: false, error: err }); - } else { - res.status(500); - res.json({ success: false, error: err }); +app.use((error, req, res, next) => { + switch (error.name) { + case 'ValidationError': + res.status(400); + res.json({ success: false, error }); + break; + case 'NotFound': + res.status(404); + res.json({ success: false, error }); + break; + default: + res.status(500); + res.json({ success: false, error }); } - next(err); + next(error); }); app.listen(process.env.PORT, () => { diff --git a/errors/index.js b/errors/index.js new file mode 100644 index 0000000..dbbde46 --- /dev/null +++ b/errors/index.js @@ -0,0 +1,9 @@ +class NotFoundError extends Error { + constructor(...args) { + super(...args); + Error.captureStackTrace(this, NotFoundError); + this.name = 'NotFound'; + } +} + +module.exports = { NotFoundError }; diff --git a/package.json b/package.json index c56ffe4..da41a8b 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "main": "app.js", "scripts": { "start": "node ./app.js", - "start-mon": "npx nodemon --inspect ./app.js", + "debug": "npx nodemon --inspect ./app.js", "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", diff --git a/routes/lists.js b/routes/lists.js index 2979464..9ea7758 100644 --- a/routes/lists.js +++ b/routes/lists.js @@ -3,6 +3,8 @@ const mongoose = require('mongoose'); const router = express.Router(); +const { NotFoundError } = require('../errors'); + const TodoList = mongoose.model('TodoList'); const asyncHelper = require('../asyncHelper'); @@ -29,4 +31,21 @@ router.post( }), ); +router.delete( + '/:id', + asyncHelper(async (req, res) => { + const { id } = req.params; + const list = await TodoList.findById(id) + .populate('todos') + .exec(); + if (!list) { + throw new NotFoundError(); + } + list.todos.forEach((todo) => { + todo.remove(); + }); + list.remove(); + res.json({ success: true }); + }), +); module.exports = router;