This is with Node :
// app.js
const express = require('express')
const todosRoutes = require("./routes/todo")
const bodyParser = require("body-parser")
const app = express()
app.use(bodyParser.json())
app.use(todosRoutes)
app.listen(3000)
// todos.js
const express = require('express')
const router = express.Router()
let todos = [];
router.get("/todos", (req, res, next) => {
res.json({ todos: todos })
})
router.post("/todos", (req, res, next) => {
const newTodo = {
id: new Date().toUTCString(),
text: req.body.text
}
todos.push(newTodo);
res.status(201).json({ message: "Todo created", todos: todos })
})
router.put("/todo/:todoId", (req, res, next) => {
const todoId = req.params.todoId
const todoIndex = todos.findIndex((todoItem) => {
return todoItem.id === todoId
})
todos[todoIndex] = { ...todos[todoIndex], text: req.body.text }
res.status(200).json({ message: 'Todo updated', todos: todos })
})
router.delete("/todo/:todoId", (req, res, next) => {
todos = todos.filter((todoItem) => {
todoItem.id !== req.params.todoId
})
res.status(200).json({ message: 'Deleted', todos: todos })
})
module.exports = router;
This is with Deno :
//app.ts
import { Application } from "<https://deno.land/x/oak/mod.ts>";
import todosRoutes from "./routes/todos.ts";
const app = new Application();
app.use(todosRoutes.routes())
app.use(todosRoutes.allowedMethods())
await app.listen({ port: 3000 });
// todos.ts
import { Router } from "<https://deno.land/x/oak/mod.ts>";
const router = new Router()
interface Todo {
id: string;
text: string;
}
let todos: Todo[] = [];
router.get('/todos', (ctx) => {
// no need to say it's JSON
ctx.response.body = { todos: todos }
})
router.post('/todos', async (ctx) => {
// must await for the data
const data = await ctx.request.body()
const newTodo: Todo = {
id: new Date().toUTCString(),
// here we have to select data.value
text: data.value
}
todos.push(newTodo)
ctx.response.body = { message: "Created todo!", todo: newTodo, todos: todos };
})
router.put('/todo/:todoId', async (ctx) => {
const todoId = ctx.params.todoId
const text = await ctx.request.body()
const todoIndex = todos.findIndex((todoItem) => {
return todoItem.id === todoId
})
todos[todoIndex] = { ...todos[todoIndex], text: text.value }
ctx.response.body = { message: 'Todo updated', todos: todos }
})
router.delete('/todo/:todoId', (ctx) => {
todos = todos.filter((todoItem) => {
todoItem.id !== ctx.params.todoId
})
ctx.response.body = { message: 'Deleted', todos: todos }
})
export default router;