[Node-Express]Middleware/next - Final Project
6531 ワード
Expressでミドルウェアを使用する必要があります.ミドルウェアを使うと、コードの長さが半分以上減ります.上の写真のようにきれいに片付けるのも簡単です.
今回記録したいのはcallback nextを利用し,ミドルウェアを利用して一括処理して共通に入る応答処理である.
通常、Expressを使用する場合はリクエスト(req)、レスポンス(res)パラメータを使用しますが、nextが3番目のパラメータであることは分かりますが、使用しません.普段nextは必要だと思っていますが、正直必要ありません.一度に回答を終える処理をたくさんしたのでnextを書く必要はありません.
すなわち、nextは、直ちに応答を行わずに他のルータに応答処理を転送するために用いられる.
私は今回のプロジェクトで管理者ページに関連するルータを作成するために使用しました.
/adminというルータで上記の設定を行います.
「/admin」パスに送信されたすべてのリクエストは、adminCheckというミドルウェアを通過します.たとえば、サーバです.com/admin/topicにpostリクエストを送信すると、管理者でない場合はAdminCheckミドルウェアでフィルタリングして応答して処理を完了します.管理者である場合、next()は次のpost'/topic'エンドポイントのtopicUploadミドルウェアに移動します.
ファイルごとに約20行のコードが減少したことに相当します.
今回記録したいのは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行のコードが減少したことに相当します.
Reference
この問題について([Node-Express]Middleware/next - Final Project), 我々は、より多くの情報をここで見つけました https://velog.io/@tkdfo93/Node-ExpressMiddlewarenext-Final-Projectテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol