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} `;
}