Skip to content

Instantly share code, notes, and snippets.

@azisuazusa
Last active October 5, 2018 10:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save azisuazusa/b4a4180c6f96ebcd730bfc5d28ea917c to your computer and use it in GitHub Desktop.
Save azisuazusa/b4a4180c6f96ebcd730bfc5d28ea917c to your computer and use it in GitHub Desktop.
todo-app-rest-men
import mongoose from 'mongoose'
import todo from './model'
export const getTodos = (request, response) => {
todo.find().exec((error, todos) => {
if (error) {
return response.json({
'success': false,
'message': 'Gagal mengambil todos!',
error
})
}
return response.json({
'success': true,
'message': 'Berhasil mengambil todos!',
todos
})
})
}
export const addTodo = (request, response) => {
const newTodo = new todo(request.body)
newTodo.save((error, todo) => {
if (error) {
return response.json({
'success': false,
'message': 'Gagal menambah todo!',
error
})
}
return response.json({
'success': true,
'message': 'Berhasil menambah todo!',
todo
})
})
}
export const updateTodo = (request, response) => {
todo.findOneAndUpdate({ _id: request.params.id }, request.body, { new: true }, (error, todo) => {
if (error) {
return response.json({
'success': false,
'message': 'Gagal mengupdate todo!',
error
})
}
return response.json({
'success': true,
'message': 'Berhasil mengupdate todo!',
todo
})
})
}
export const getTodo = (request, response) => {
todo.find({ _id: request.params.id }).exec((error, todo) => {
if (error) {
return response.json({
'success': false,
'message': 'Gagal mengambil todo!',
error
})
}
return response.json({
'success': true,
'message': 'Berhasil mengambil todo!',
todo
})
})
}
export const deleteTodo = (request, response) => {
todo.findByIdAndRemove({ _id: request.params.id }).exec((error, todo) => {
if (error) {
return response.json({
'success': false,
'message': 'Terjadi error!',
error
})
}
if (todo.length > 0) {
return response.json({
'success': true,
'message': 'Berhasil mendapatkan todo dengen Id ${request.body.id}',
todo
})
} else {
return response.json({
'success': true,
'message': 'Tidak ada todo dengan Id ${request.body.id}',
})
}
})
}
// import library
import express from 'express'
import path from 'path'
import bodyParser from 'body-parser'
import mongoose from 'mongoose'
// import route
import route from './route'
const app = express()
/*
* Izinkan CORS
* apa itu CORS?
* https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
*/
app.use((request, response, next) => {
response.header('Access-Control-Allow-Origin', '*')
response.header('Access-Control-Allow-Header', 'Origin, X-Requested-With, Content-Type, Accept')
next();
})
// set bodyParser sebagai middleware yang akan memparsing body request
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: true }))
// connect ke database
mongoose.Promise = global.Promise
mongoose.connect('mongodb://localhost/todo-app-mern-stack', {
useNewUrlParser: true
})
// set route
app.use('/api', route)
app.get('/', (request, response) => {
return response.end('API Working')
})
// jika route tidak ditemukan
app.use((request, response, next) => {
response.status(404).send('<h2 align=center>Page not found!</h2>')
})
// start server
const port = 3000
app.listen(port, () => {
console.log(`App Server Listening at ${port}`)
})
import mongoose from 'mongoose'
var Schema = mongoose.Schema({
createdAt: {
type: Date,
default: Date.now()
},
fullName: String,
todoText: String
})
export default mongoose.model('Todo', Schema)
{
"name": "todo-app-men-stack",
"version": "1.0.0",
"description": "a todo app with men stack for learning purpose",
"main": "index.js",
"scripts": {
"babel-node": "babel-node",
"start": "nodemon --exec npm run babel-node index.js"
}
}
import express from 'express'
import * as controller from './controller'
const route = express.Router()
route.route('/')
.get(controller.getTodos)
.post(controller.addTodo)
route.route('/:id')
.get(controller.getTodo)
.put(controller.updateTodo)
.delete(controller.deleteTodo)
export default route
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment