Typescript로 Node.js 및 Express.js API를 빌드합니다.
34493 단어 typescriptnode
파일 구조
├── build
├── node_modules
├── src
│ ├── data
│ │ └── tasks.json
│ ├── routes
│ │ └── task-routes.ts
│ ├── services
│ │ └── task-service.ts
│ ├── index.ts
| └── types.d.ts
├── .gitignore
├── package-lock.json
├── package.json
└── tsconfig.json
프로젝트 초기화
먼저 프로젝트를 초기화해야 합니다.
npm init -y
패키지 설치
프로젝트의 종속성을 설치합니다.
npm install --save express
그리고 프로젝트의 dev 종속성을 설치합니다.
npm install --save-dev @types/express typescript ts-node-dev
package.json에 스크립트 추가
package.json에 스크립트를 추가합니다.
"scripts": {
"dev": "ts-node-dev src/index.ts",
"start": "node build/index.js",
"tsc": "tsc"
}
TypeScript 초기화
이제 TypeScipt를 초기화합니다.
$ npm run tsc -- --init
이렇게 하면 TypeScript 구성 파일인
tsconfig.json
파일이 생성됩니다.TypeScript 구성
이 프로젝트에서는 다음 구성을 사용합니다.
{
"compilerOptions": {
"target": "es2016",
"module": "commonjs",
"resolveJsonModule": true,
"outDir": "./build",
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"skipLibCheck": true
}
}
구성에 대한 자세한 내용은 TypeScript Configuration을 참조하십시오.
서버 만들기
이 프로젝트에서는 Express.js로 서버를 생성합니다.
// src/index.ts
import express from 'express';
const app = express();
const PORT = 3000;
app.use(express.json());
app.get('/', (_req, res) => {
res.send('Hello World!');
});
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
그리고 서버를 컴파일합니다.
$ npm run dev
서버에 데이터 추가
이 프로젝트에서는 다음 데이터를 사용합니다.
// src/data/tasks.json
[
{
"id": 1,
"title": "Task 1",
"description": "Description 1",
"priority": "High",
"completed": false,
"createdAt": "2020-01-01"
},
{
"id": 2,
"title": "Task 2",
"description": "Description 2",
"priority": "Low",
"completed": false,
"createdAt": "2020-01-02"
},
{
"id": 3,
"title": "Task 3",
"description": "Description 3",
"priority": "Medium",
"completed": false,
"createdAt": "2020-01-03"
},
{
"id": 4,
"title": "Task 4",
"description": "Description 4",
"priority": "High",
"completed": false,
"createdAt": "2020-01-04"
},
{
"id": 5,
"title": "Task 5",
"description": "Description 5",
"priority": "Low",
"completed": false,
"createdAt": "2020-01-05"
},
{
"id": 6,
"title": "Task 6",
"description": "Description 6",
"priority": "Medium",
"completed": false,
"createdAt": "2020-01-06"
},
{
"id": 7,
"title": "Task 7",
"description": "Description 7",
"priority": "High",
"completed": false,
"createdAt": "2020-01-07"
},
{
"id": 8,
"title": "Task 8",
"description": "Description 8",
"priority": "Low",
"completed": false,
"createdAt": "2020-01-08"
},
{
"id": 9,
"title": "Task 9",
"description": "Description 9",
"priority": "Medium",
"completed": false,
"createdAt": "2020-01-09"
}
]
tasks.json 파일에 유형을 추가해야 합니다.
// src/types.d.ts
export type Priority = 'Low' | 'Medium' | 'High';
export interface BaseTask {
title: string;
description: string;
priority: Priority;
completed: boolean;
createdAt: string;
}
export interface Task extends BaseTask {
id: number;
}
서비스를 만듭니다.
이제 요청을 처리할 서비스가 필요합니다.
// src/services/task-services.ts
import tasksData from '../data/tasks.json';
import { Task, BaseTask } from '../types';
const tasks: Task[] = tasksData as Task[];
export const getAllTasks = ():Task[] => tasks;
export const getTask = (id: number):Task | undefined => tasks.find(task => task.id === id);
export const addTask = (task: BaseTask):void => {
const newTask = { ...task, id: tasks.length + 1 };
tasks.push(newTask);
};
export const updateTask = (id: number, task: BaseTask):void => {
const taskIndex = tasks.findIndex(t => t.id === id);
if (taskIndex > -1) {
tasks[taskIndex] = { ...tasks[taskIndex], ...task };
}
};
export const deleteTask = (id: number):void => {
const taskIndex = tasks.findIndex(t => t.id === id);
if (taskIndex > -1) {
tasks.splice(taskIndex, 1);
}
};
서버에 경로 추가
서버에 경로를 추가합니다.
// src/routes/task-routes.ts
import express from "express";
const router = express.Router();
import {getAllTasks, getTask, addTask, updateTask, deleteTask} from "../services/task-services";
import {BaseTask} from "../types";
router.get('/', (_req, res) => {
res.send(getAllTasks());
});
router.get('/:id', (req, res) => {
const {id} = req.params;
const task = getTask(Number(id));
if (task) {
res.send(task);
} else {
res.sendStatus(404);
}
});
router.post('/', (req, res) => {
const {title, description, priority, completed, createdAt} = req.body;
const task: BaseTask = {
title,
description,
priority,
completed,
createdAt
};
addTask(task);
res.send({message: 'Task added successfully'});
});
router.put('/:id', (req, res) => {
const {id} = req.params;
const {title, description, priority, completed, createdAt} = req.body;
const task: BaseTask = {
title,
description,
priority,
completed,
createdAt
};
updateTask(Number(id), task);
res.send({message: 'Task updated'});
});
router.delete('/:id', (req, res) => {
const {id} = req.params;
deleteTask(Number(id));
res.send({message: 'Task deleted'});
});
module.exports = router;
이제 서버에 경로를 추가해야 합니다.
// src/index.ts
app.use("/api/tasks", require("./routes/task-routes"));
이제 작업 가져오기, 작업 가져오기, 추가, 업데이트 및 삭제에 사용할 수 있는 서버 API를 만들었습니다.
Reference
이 문제에 관하여(Typescript로 Node.js 및 Express.js API를 빌드합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/carlos0318/build-a-nodejs-and-expressjs-api-with-typescript-3723텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)