管理システム
導入
これはkoa2
ベースにしたバックグラウンド管理システムです。
フロントエンド JS フレームワークとしてjQuery
使用する CSS フレームワークとしてbootstrap
を使用するpug
/ jade
およびhandlebars
を HTML ページ テンプレートとして使用するPostgreSql
を使用してビジネス データを保存するmongodb
を使用してsession
を保存する
Bookshelf
+ Knex
ORM
およびQuery Builder
として使用する
エラー情報に関するフィードバックを収集するためのプラットフォームとしてSentry
使用します。 AJAX
使用してフロントエンド要求を処理し、 CronJob
されたタスクの実行を完了します。
ディレクトリ構造とバベル構成については、https://github.com/17koa/koa-demo を参照してください。
元のリンクは削除されたようです。これは私がフォークしたバージョンです https://github.com/liuyueyi1995/koa2-demo
ウェブサイトのフロントエンド コードは、私の以前のプロジェクトから来ています https://github.com/liuyueyi1995/oa
基本的なタスク
- バックエンド管理者のログイン登録
- B ユーザー情報の管理
- C ユーザーの役割管理
- D 組織運営
- E プロジェクト管理
- F バックエンドページング +
AJAX
によるクエリと検索で取得したコンテンツの表示 - G 一時的なユーザーの作成と一時的な役割の割り当てと再利用
- Hログ管理
完全
- 基本的な MVC 構造は完成しました。
- 登録、ログイン、セッションの読み取りと書き込みを含むタスク A が完了しました。
- ユーザー情報の照会、あいまい検索、追加、削除、基本情報の変更、パスワードの変更を含むタスク B が完了しました。
- 複数テーブルのクエリ、ファジー検索、カスケード ドロップダウン メニューの処理、情報の追加と削除を含むタスク C が完了しました。
- 機関情報の照会、あいまい検索、追加、削除、変更を含むタスク D が完了しました。
- プロジェクト情報のクエリ、あいまい検索、追加、削除、変更を含むタスク E が完了しました。
- タスク F は完了しています。ページング ボタンのクリック イベントがトリガーされたときに、検索ボックスにコンテンツがあるかどうかを判断することによって、バックグラウンドによって返される結果セットが決定されます。
- タスク G は、ユーザーを内部ユーザーと外部ユーザーに分割し、異なるパスワード生成方法を使用し、ロールに有効期限属性を追加することにより、バックグラウンドで期限切れのロール情報を定期的にクリーンアップします。
- ログの表示とあいまい検索を含むタスク G が完了しました。
- フォームの表示形式が改善され、ドロップダウン メニューが変更され、日付コントロールが追加され、ブール値の入力がラジオの形式になりました。
- ユーザーログインとデータ管理の 2 つの機能は関連付けられています。
- 外部役割と内部役割の区別が完了し、役割の期限設定が完了しました。
TODO
- 日付、数値、およびブール値のクエリを改善する必要があります (例: タイムスタンプ、ブール値)。
- ユーザー入力の検証を改善する必要があります (電子メール、電話など)。
- コードの再利用の度合いを向上させます。
集中
機密情報を含むconfig.js
ファイルはリポジトリから削除されているため、使用する場合は追加する必要があります。
var config = {
database: '',
username: '',
password: '',
host: '',
port:
};
module.exports = config;
問題
- カスケードメニューにはバグがあり、最初は
type
を変更しないとsite
リストが表示されません。- 解決しました。
- それは
onchange
に問題があるはずです。 - デフォルトの null 値を
type
ドロップダウン メニューに追加することで、ユーザーに変更を強制します。
- データベースを変更した後、
updated_at
値は変更されていません。- 解決しました。
-
model
定義するときにhasTimestamps:true
を追加するだけです。
- データベースを変更すると、リストの順序が崩れます。
- 解決しました。
-
orderBy
使用して、データベースが検索結果を返す前に検索結果を並べ替えます。
- ロール管理ページで、サイトの値が空の場合、追加に失敗する場合があります。
- 解決しました。
- フロントエンドの
null
バックエンドに返されると空の文字列になり、外部キーのinteger
型と競合します。
- ページング後、後続のコンテンツが変更されると、変更が成功すると最初のページに戻ります。
- ページング後、検索結果にコンテンツが複数ページある場合は、2 ページ目をクリックすると、元の結果の 2 ページ目に戻ります。
- 解決しました。
- 現在ページング
AJAX
処理は 1 つだけであるため、検索結果をページングで表示したい場合は、別の状態を追加する必要があります。 - オリジナルのページングに基づいて判断を追加し、
- この時点で検索ボックスにコンテンツがある場合は、このコンテンツでデータベースが照会され、対応するページのコンテンツが返されます。
- このとき検索ボックスが空の場合は、元のデータに対応するページの内容が返されます。
- 検索後、ページング コンポーネントのページ数が正しくありません。たとえば、元の結果には 5 ページありますが、検索結果には 2 ページしかありませんが、5 つのページ番号ボタンが表示されたままになります。
- 解決しました。
- 検索後の結果の数を取得し、ページング ボタンを再描画します。
- 複数回検索すると、ページング コンポーネントのページ数が正しくなくなります。たとえば、最初の検索結果には 2 ページがあり、2 番目の検索結果には 3 ページがありますが、それでもページ番号ボタンは 2 つしか表示されません。
- 解決しました。
- 検索ボックスの内容をリアルタイムで取得し、内容が空になったらページを更新します。
-
handlebars
テンプレートを使用すると、タイムスタンプが正しく解析されません。- 解決しました。
- カスタム
helper
使用してタイムスタンプを解析します。
- ログインしていない場合、URL を変更するとログインがスキップされ、データベースが直接操作されます。
- 解決しました。
- 各
get
リクエストが返される前にsession
判定が追加され、 session
が空の場合はlogin
ページにジャンプします。
- 内部ユーザーの削除には結合が必要です。pgsql の削除では
using
のみがサポートされており、bookshelf ではusing
サポートされていません。 - 日付/時刻フィールドの値が範囲外です
- 解決しました。
- ローカル テスト データベースと Alibaba Cloud データベースはどちらも pgsql9.4 ですが、レビュー メカニズムは異なります。
- Alibaba Cloudの日付判別が午前と午後(AM/PM)に表示されないようです
- したがって、日付を書式設定するための
format
メソッドがDate
クラスに追加されました。
- 検索結果とすべての結果を切り替えます。
- 解決しました。
- 最も初期の方法は、検索ボックスが空の場合にリアルタイム監視を使用することでしたが、これは一部のブラウザーやオペレーティング システムでは無効です。
- そのため、バナー内にリンクを張る方法を利用し、検索結果から全ての結果にリンクを張ります。
- 長い日付形式は多くのページを占めます。
- 解決しました。
- バックエンドでは、日付をフォーマットして単純化して処理します。
- バックグラウンドのデータベース操作でエラーが報告された場合、フロントエンドは関連情報のフィードバックを取得できません。
- 解決しました。
- エラー判定を行うためにバックエンドに then().catch() ブロックを追加します。
- 次のステップでは、特定のエラー コードを分析し、詳細情報をフロントエンドに通知します。
- ロールを追加する場合、同じ名前のユーザーを区別することはできません。
- 解決しました。
- ユーザー名の後に電子メール アドレスを指定することで、同じ名前のユーザーを区別します。