노드는 ts 파일을 실행시킬 수 없다.
tsc 명령어로 js 파일을 만들고 노드로 실행할 수 있다.
이를 합친 ts-node 라는 것도 있다.
프로젝트를 생성하고, ts 설정을 하자.
npm init
tsc --init
컴파일을 관찰모드로 하고 노드몬으로 js 파일이 바뀔 때마다 재실행할 수 있도록 하자.
tsc -w
nodemon dist/app.js
app.ts
import express, {Request, Response, NextFunction} from 'express';
import {json} from "body-parser";
import todoRoutes from './routes/todos';
const app = express();
app.use(json());
app.use('/todos', todoRoutes);
app.use((err: Error, req: Request, res: Response, next: NextFunction) => {
res.status(500).json({message: err.message});
});
app.listen(3000);
controllers/todo.ts
import {RequestHandler} from "express";
import {Todo} from "../models/todos";
const TODOS: Todo[] = [];
export const createTodo: RequestHandler = (req, res, next) => {
const text = (req.body as { text: string }).text;
const newTodo = new Todo(Math.random().toString(), text);
TODOS.push(newTodo);
res.status(201).json({message: 'Created the todo.', createdTodo: newTodo});
};
export const getTodos: RequestHandler = (req, res, next) => {
res.json({todos: TODOS});
};
export const updateTodo: RequestHandler<{ id: string }> = (req, res, next) => {
const todoId = req.params.id;
const updatedText = (req.body as {text: string}).text;
const todoIndex = TODOS.findIndex(todo => todo.id === todoId);
if (todoIndex < 0) {
throw new Error('Could not find todo!');
}
TODOS[todoIndex] = new Todo(TODOS[todoIndex].id, updatedText);
res.json({message: 'Updated!', updatedTodo: TODOS[todoIndex]});
};
export const deleteTodo: RequestHandler<{ id: string }, { message: string }> = (req, res, next) => {
const todoId = req.params.id;
const todoIndex = TODOS.findIndex(todo => todo.id === todoId);
if (todoIndex < 0) {
throw new Error('Could not find todo!');
}
TODOS.splice(todoIndex, 1);
res.json({message: 'Deleted!'});
};