Lesson 55 of 56 · Typescript
Project – Todo REST API (Express + TypeORM)
Duration: 30 minutes
Folder layout
src/
entity/
Todo.ts
controller/
todo.controller.ts
router/
todo.router.ts
server.ts
Entity (Todo.ts)
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
@Entity()
export class Todo {
@PrimaryGeneratedColumn()
id!: number;
@Column()
title!: string;
@Column({ default: false })
completed!: boolean;
}
Controller
import { Request, Response } from 'express';
import { AppDataSource } from '../data-source';
import { Todo } from '../entity/Todo';
const repo = AppDataSource.getRepository(Todo);
export const getTodos = async (_: Request, res: Response) => {
const todos = await repo.find();
res.json(todos);
};
export const createTodo = async (req: Request, res: Response) => {
const todo = repo.create(req.body);
const result = await repo.save(todo);
res.status(201).json(result);
};
Router
import { Router } from 'express';
import { getTodos, createTodo } from '../controller/todo.controller';
const router = Router();
router.get('/', getTodos);
router.post('/', createTodo);
export default router;
Server (server.ts)
import 'reflect-metadata';
import express from 'express';
import { AppDataSource } from './data-source';
import todoRouter from './router/todo.router';
async function bootstrap() {
await AppDataSource.initialize();
const app = express();
app.use(express.json());
app.use('/todos', todoRouter);
app.listen(3000, () => console.log('🦾 API listening on 3000'));
}
bootstrap();
Run npm run dev (with ts-node-dev).