node + express + typescript

jeongwon yun·2023년 3월 8일
0

Typescript

목록 보기
25/25

노드는 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!'});
};

0개의 댓글