タイプスクリプトベースのルータの適用方法[node.js]
23449 ワード
緒論
以前の文書では、
index.ts
ファイルにおいて、ユーザテーブルにおいてCRUDを行うすべてのミドルウェアが実装されている.しかし、実際のプロジェクトを行うと、テーブルの数が多くなり、プロジェクト構造が複雑になります.したがって、プロジェクトを行うときは、テーブル(または機能)でファイルを分離することに慣れています.
そこで、この記事では、JavaScriptとは異なり、タイプスクリプト環境でルーティングを行う方法について簡単に説明します.
シリーズ1,2の内容を基にした内容であるため、開発環境設定をしていない人はシリーズ1シリーズ。を参照することができる.
また、Javascript+Expressベースのルーティング方法については、ここです。を参照してください.
ファイル構造の変更
機能別にファイルを分離するために、
src
ディレクトリにroutes
ディレクトリが作成されました.typeorm-example
├── src
│ ├── entity
│ │ └── User.ts
│ ├── migration
│ ├── routes (새로 추가된 디렉토리)
│ └── index.ts
├── node_modules
├── ormconfig.js
├── package-lock.json
├── package.json
├── README.md
├── .gitignore
└── tsconfig.json
次に、routes
ディレクトリ内に、以前に実装されたCRUDユーザテーブルの4つのミドルウェアを分離するためのuesr.ts
というファイルが作成される.src
のディレクトリ構造を見てみましょう.src
├── entity
│ └── User.ts
├── migration
├── routes (새로 추가된 디렉토리)
│ └── user.ts (새로 추가된 파일)
└── index.ts
user.tsファイルの定義
ファイルを定義する前に、まずJavaScriptベースでルーティングを定義するときに、次のコードを定義できます.
const express = require('express');
const router = express.Router();
router.get('', (req, res, next) => {
res.send("Hello world");
});
module.exports = router;
このようにExpressのRouting()メソッドをmodule.exports = ...
形式として定義する.タイプスクリプトのルーティングを定義するには、次の手順に従います.
import express, { Request, Response, NextFunction } from 'express';
const router = express.Router();
router.get('', async (req: Request, res: Response, next: NextFunction) => {
res.send("Hello world");
});
export = router;
JavaScriptコードとほとんど似ていますが、モジュールのインポートとエクスポートの部分に違いがあることがわかります.インデックスとしてUser Entityファイルをインポートtsファイルで定義したCRUDミドルウェアを再定義しました.
user.ts
の完全なコードは次のとおりです.import express, { Request, Response, NextFunction } from 'express';
import { User } from "../entity/User";
const router = express.Router();
router.get('/', async (req: Request, res: Response, next: NextFunction) => {
const users = await User.find();
res.send(users);
});
router.post('/', async (req: Request, res: Response, next: NextFunction) => {
const user = new User();
const {
firstName,
lastName,
age
} = req.body;
user.firstName = firstName;
user.lastName = lastName;
user.age = age;
await user.save().then((user) => {
res.status(201).send(user);
})
.catch((err) => {
res.status(400).send(err);
});
});
router.patch('/', async (req: Request, res: Response, next: NextFunction) => {
await User.update({
id: 1,
}, {
age: 30,
}).then((result) => {
res.status(200).send(result);
}).catch((err) => {
res.status(400).send(err);
});
});
router.delete('/', async (req: Request, res: Response, next: NextFunction) => {
await User.delete({firstName: 'minsu'})
.then((result) => {
res.status(204).send(result);
})
.catch((err) => {
res.send(err);
})
});
export = router;
index.tsファイルの変更
index.tsファイルは4つのユーザテーブルに4つのミドルウェアを定義する必要がないため、修正コードは以下の通りである.
import "reflect-metadata";
import {createConnection} from "typeorm";
import userRouter from "./routes/user"; // 해당 부분 추가
import express, { Request, Response, NextFunction } from 'express';
import bodyParser from 'body-parser';
const app = express();
app.use(bodyParser.urlencoded({extended:true}));
app.use(bodyParser.json());
app.use('/user', userRouter); // 해당 부분 추가
app.listen(3000, () => {
console.log('Starting Server with 3000 port');
createConnection().then(async connection => {
console.log("디비 연결 성공");
}).catch(error => console.log(error));
});
routes/user.ts
をもたらし、このときuserRouter
と名付けられた.プロジェクトの規模が拡大するにつれて、複数のルーティングファイルが存在する可能性があるため、適切に命名することも重要な要素である可能性があります.
その後、
app.use('/user', userRouter);
コードによってミドルウェアが追加された.前述したように、ミドルウェアを定義した後、REST要求を
localhost:3000/user
経路で送信することができる.これにより、修正コードは
index.ts
ファイルのサイズを縮小し、ファイルを機能別に区分することができ、メンテナンスと効率を向上させることができる.検査結果
まず、ユーザテーブルのデータを初期化します.この状態でGETリクエストをパスに送信すると、結果は以下のようになります.
(delete、update、create機能の結果は省略😅)
Reference
この問題について(タイプスクリプトベースのルータの適用方法[node.js]), 我々は、より多くの情報をここで見つけました https://velog.io/@limsw/node.js-Typescript-기반-라우터-적용하는-법テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol