[Node-Express]Middleware/next - Final Project


Expressでミドルウェアを使用する必要があります.ミドルウェアを使うと、コードの長さが半分以上減ります.上の写真のようにきれいに片付けるのも簡単です.
今回記録したいのはcallback nextを利用し,ミドルウェアを利用して一括処理して共通に入る応答処理である.

1.次は?


通常、Expressを使用する場合はリクエスト(req)、レスポンス(res)パラメータを使用しますが、nextが3番目のパラメータであることは分かりますが、使用しません.普段nextは必要だと思っていますが、正直必要ありません.一度に回答を終える処理をたくさんしたのでnextを書く必要はありません.
すなわち、nextは、直ちに応答を行わずに他のルータに応答処理を転送するために用いられる.

2.コード作成


私は今回のプロジェクトで管理者ページに関連するルータを作成するために使用しました.
import jwt from 'jsonwebtoken';
import dotenv from 'dotenv';
dotenv.config();

//? 어드민 체크
const adminCheck = async (req, res) => {
  const { authorization } = req.headers;
  //? authoriztion 유무 체크
  if (!authorization) return res.status(401).json({message: 'Unauthorized'});
  const accessToken = authorization.split(' ')[1];
  const accTokenSecret = process.env.ACCTOKEN_SECRET || 'acctest';
  //? 어드민 status 9 체크
  const isAdmin = await jwt.verify(accessToken, accTokenSecret, async (err, decoded) => {
    if (err) return false
    return decoded.status === 9;
  });
  //? 어드민 아니라면 요청 거부
  if (!isAdmin) return res.status(401).json({message: 'Request was rejected'});
  else return next(); //? 맞다면 함수를 이용하여 다음 작업 실행.
}

export default adminCheck;
以上のコードについて説明するとadminをチェックする際にadminでなければ回答して処理を終了するかnextを用いて次の処理を行うことができる.

/adminというルータで上記の設定を行います.
「/admin」パスに送信されたすべてのリクエストは、adminCheckというミドルウェアを通過します.たとえば、サーバです.com/admin/topicにpostリクエストを送信すると、管理者でない場合はAdminCheckミドルウェアでフィルタリングして応答して処理を完了します.管理者である場合、next()は次のpost'/topic'エンドポイントのtopicUploadミドルウェアに移動します.
ファイルごとに約20行のコードが減少したことに相当します.