├── .gitignore ├── README.md ├── api ├── controllers │ └── todoListController.js ├── models │ └── todoListModel.js └── routes │ └── todoListRoutes.js ├── package.json └── server.js /.gitignore: -------------------------------------------------------------------------------- 1 | logs 2 | *.log 3 | npm-debug.log* 4 | node_modules 5 | .npm 6 | .DS_Store 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Nodejs in 10 minutes 2 | 3 | clone the project 4 | 5 | ### Installations 6 | * npm install 7 | 8 | ### Run 9 | 10 | * npm run start 11 | 12 | :) -------------------------------------------------------------------------------- /api/controllers/todoListController.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var mongoose = require('mongoose'), 4 | Task = mongoose.model('Tasks'); 5 | 6 | 7 | 8 | exports.list_all_tasks = function(req, res) { 9 | Task.find({}, function(err, task) { 10 | if (err) 11 | res.send(err); 12 | res.json(task); 13 | }); 14 | }; 15 | 16 | 17 | exports.create_a_task = function(req, res) { 18 | var new_task = new Task(req.body); 19 | new_task.save(function(err, task) { 20 | if (err) 21 | res.send(err); 22 | res.json(task); 23 | }); 24 | }; 25 | 26 | exports.read_a_task = function(req, res) { 27 | Task.findById(req.params.taskId, function(err, task) { 28 | if (err) 29 | res.send(err); 30 | res.json(task); 31 | }); 32 | }; 33 | 34 | exports.update_a_task = function(req, res) { 35 | Task.findOneAndUpdate({_id:req.params.taskId}, req.body, {new: true}, function(err, task) { 36 | if (err) 37 | res.send(err); 38 | res.json(task); 39 | }); 40 | }; 41 | // Task.remove({}).exec(function(){}); 42 | exports.delete_a_task = function(req, res) { 43 | 44 | Task.remove({ 45 | _id: req.params.taskId 46 | }, function(err, task) { 47 | if (err) 48 | res.send(err); 49 | res.json({ message: 'Task successfully deleted' }); 50 | }); 51 | }; 52 | -------------------------------------------------------------------------------- /api/models/todoListModel.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | 4 | var mongoose = require('mongoose'); 5 | var Schema = mongoose.Schema; 6 | 7 | var TaskSchema = new Schema({ 8 | name: { 9 | type: String, 10 | Required: 'Kindly enter the name of the task' 11 | }, 12 | Created_date: { 13 | type: Date, 14 | default: Date.now 15 | }, 16 | status: { 17 | type: [{ 18 | type: String, 19 | enum: ['pending', 'ongoing', 'completed'] 20 | }], 21 | default: ['pending'] 22 | } 23 | }); 24 | 25 | 26 | module.exports = mongoose.model('Tasks', TaskSchema); -------------------------------------------------------------------------------- /api/routes/todoListRoutes.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = function(app) { 4 | var todoList = require('../controllers/todoListController'); 5 | 6 | // todoList Routes 7 | app.route('/tasks') 8 | .get(todoList.list_all_tasks) 9 | .post(todoList.create_a_task); 10 | 11 | app.route('/tasks/:taskId') 12 | .get(todoList.read_a_task) 13 | .put(todoList.update_a_task) 14 | .delete(todoList.delete_a_task); 15 | }; 16 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "todolistapi", 3 | "version": "1.0.0", 4 | "description": "RESTful todoListApi", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "start": "nodemon server.js" 9 | }, 10 | "repository": { 11 | "type": "git", 12 | "url": "git+https://github.com/generalgmt/RESTfulAPITutorial.git" 13 | }, 14 | "keywords": [ 15 | "RESTful", 16 | "API", 17 | "Tutorial" 18 | ], 19 | "author": "olatunde garuba", 20 | "license": "ISC", 21 | "bugs": { 22 | "url": "https://github.com/generalgmt/RESTfulAPITutorial/issues" 23 | }, 24 | "homepage": "https://github.com/generalgmt/RESTfulAPITutorial#readme", 25 | "devDependencies": { 26 | "nodemon": "^1.11.0" 27 | }, 28 | "dependencies": { 29 | "body-parser": "^1.15.2", 30 | "express": "^4.14.0", 31 | "mongoose": "^5.7.7" 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /server.js: -------------------------------------------------------------------------------- 1 | var express = require('express'), 2 | app = express(), 3 | port = process.env.PORT || 3000, 4 | mongoose = require('mongoose'), 5 | Task = require('./api/models/todoListModel'), 6 | bodyParser = require('body-parser'); 7 | 8 | mongoose.Promise = global.Promise; 9 | mongoose.connect('mongodb://localhost/Tododb'); 10 | 11 | 12 | app.use(bodyParser.urlencoded({ extended: true })); 13 | app.use(bodyParser.json()); 14 | 15 | 16 | var routes = require('./api/routes/todoListRoutes'); 17 | routes(app); 18 | 19 | app.use(function(req, res) { 20 | res.status(404).send({url: req.originalUrl + ' not found'}) 21 | }); 22 | 23 | app.listen(port); 24 | 25 | console.log('todo list RESTful API server started on: ' + port); 26 | --------------------------------------------------------------------------------