blog

Egg Middleware: ログを生成する

ユーザーの追加、削除、変更、取得操作をリストとして表示する必要があります。 ユーザー名、操作の種類、操作モジュール、メモを含めます。 まず、ユーザーが追加、削除、変更、確認操作を行った際に、対応する情...

Nov 4, 2020 · 2 min. read
シェア

1.需要

  • ユーザーの追加、削除、変更、取得操作をリストとして表示する必要があります。
  • ユーザー名、操作タイプ、操作モジュール、およびメモが含まれます。

2.分析

まず、ユーザーが追加、削除、変更、チェックの操作を行ったときに、対応する情報がデータベースに保存されるように実装する必要があります。必要なフィールド情報はリクエストから取得できます:

  • Username:現在のログインアカウント名;
  • 操作タイプ:現在のリクエストのタイプです;
  • /web/{{モジュール名}}/{{ }}オペレーションモジュール:ルートからのインターセプト、ルーティングルールは.


.

ミドルウェアを記述します。

middlewareディレクトリに新しいLogMiddleware.jsファイルを作成します:

'use strict';
module.exports = () => {
 return async function log(ctx, next) {
 ...//ここにロジックを書く
 }
};

アプリケーションにおけるミドルウェアの利用

ファイルを編集します:

module.exports = {
 // 必要なミドルウェアを設定する。配列の順番は、ミドルウェアのロード順となる。
 middleware: [ 'LogMiddleware' ],
};

ログの生成

データの取得

const arr = ctx.request.url.split('/');
const model = arr[2];
const type = ctx.request.method;
global.log = {
 user_id: ctx.user.account_id,
 log_model: model,
 log_type: type,
 log_message: null,
};

データの処理

操作モジュール String、操作タイプ Number でデータベースに格納されているフィールド。

switch (log_model) {
 case 'ferry': model = 'リアルタイムモニター; break;
 ...
 case 'area': model = 'リージョン管理; break;
 default: model = 'ユーザー管理;
}
switch (log_type) { // (1ビュー 2: 作成 3: 変更 4: 削除)
 case 'GET': type = 1; break;
 case 'POST': type = 2; break;
 case 'PUT': type = 3; break;
 default: type = 4;
}

ログの作成

ctx.model.Log.create(global.log);

フルコード

if (ctx.request.path !== '/auth/login/web') {//ロギングインターフェースを除外する
 const type = ctx.request.method;
 const arr = ctx.request.url.split('/');
 const model = arr[2];
 try {
 global.log = {
 user_id: ctx.user.account_id,//現在のユーザー情報をctxに格納する別のミドルウェアを作成する。.user 
 log_model: model,
 log_type: type,
 log_message: null,
 };
 await next();
 if (global.log.log_message) {
 const { log_type, log_model } = global.log;
 let model = '',
 type = '';
 switch (log_model) {
 ...
 }
 switch (log_type) { // (1ビュー 2: 作成 3: 変更 4: 削除)
 ...
 }
 global.log.log_model = model;
 global.log.log_type = type;
 ctx.model.Log.create(global.log);
 }
 } catch (error) {
 console.log('LogERROR:', error);
 this.ctx.body = {
 code: 50000,
 message: `LogERROR:${error}`,
 };
 }
} else {
 await next();
}

トリガーログ生成

Controller ファイルで、ログを生成する必要のあるインターフェースの下に以下のコードを追加します:

async index() {
 ...
 global.log.log_message = 'ユーザーリストを表示する;
}
async delete() {
 ...
 global.log.log_message = `idが${body.ids} `;
}
Read next

ネイティブJSにおけるプロトタイプ継承のいくつかのタイプの違い。

これらのメソッドやnew Father()は、親クラスのプライベート・プロパティも継承します。createは、プロトタイプのポインティングを変更するためのプロトタイプチェーンを作成します。次の2つは、親のプロトタイプと子のプロトタイプチェーンを接続するもので、ブラウザのパフォーマンスをより消費します。 プロトタイプを変更することは、すべてのブラウザエンジンで可能です。

Nov 3, 2020 · 2 min read