KOA --->ルータ、コントローラ、サービスの実装[4のMVCの実現]

説明

  • 前:[MVCはTERを達成]
  • 基本原則ルーター層、コントローラ層、サービス層、およびマルクラスによってこれらのレベルの間でパラメータを渡す必要の成功を達成するために前。
  • これは主に、具体的な運用レベルによって達成されます。
    • ルーター層:ページのルーティング、モニター、およびコールルーティングハンドラコントローラ層
    • コントローラー層:サービスを提供するために、ルーター層、サービス層を呼び出すには、データ処理を提供します。

始めます

ローカルホスト:3000アクセスにブラウザを開き
ここに画像を挿入説明

  • この場合いいえ、ルーティング処理機能。
  • 栗:データ復帰

ルータ層

  • アイデア:
    層呼ルータKOAにおいて
    接触がルーティング機能処理経路確立2.
    3.マウントルーティング
    :4.ルールを定義this.koa = new koa(conf)するthis.$app = new koa(conf)(KOAは一例である)複数の意味パラメータを作成します。
const koa = require('koa');
const koaRouter = require('koa-router');
class Mar {
	constructor(conf) {
		this.$app = new koa(conf);
		this.$router = new koaRouter();
		this.service = new Service(this);
		this.controller = new Controller(this);
		this.router = new Router(this);
	}
}

class Router {
	constructor(app) {
		const { controller, $router, $app } = app;
		$router.get('/', controller.index);
		$app.use($router.routes());
	}
}
  • この場合、ルーター層、KOA-ルータの使用の成功は、作成したルートをマウント
  • 以下のメソッドは、インデックスのみコントローラクラスを作成します。
  • KOA-ルータ、CTXが合格するとき、モニターをルーティングし、次のターゲット

コントローラ層

  • CTXを使用してこの方法の書き込み率層、および戻りオブジェクト
class Controller {
	constructor() {
		const { service } = app;
		console.log('service:', service.test());
		this.service = service;
	}
	async index (ctx) {
		ctx.body = {
			name: 'marron',
			age: 18,
			remarks:`forever 18`
		}
	}
}

このときは、http:// localhostを:3000は、以下の情報を返します。
ここに画像を挿入説明

  • サービス層の非同期メソッド呼び出し
async index (ctx) {
	ctx.body = await service.getName();
}

ここに画像を挿入説明
ここに画像を挿入説明

  • リフレッシュがhttp://localhost:3000いるので文句を言うでしょうservice没有定义
  • よくお読み機能があります:
  1. 私達はちょうどにあるconstructor機能の使用this.service = service
  2. this.service = service実際、ちょうどマウント方法(コントローラ)インスタンスへ。
  3. どのようにサービス層でメソッドを使用するには?そのクラスコントローラのための方法を提供し
    、クラスは単なる糖衣構文である-3.1 JavaScriptでは、実際にクラスの概念ではありません
    -3.2以下のコードを見て
class Point {
	constructor() {...},
   	getX() {...},
   	getY() {...}
}
// 等同于
Point.prototype = {
	constructor() {},
	getX() {},
	getY() {}
}

上記のおかげで、次のインスピレーション:

  1. 層を初期化するときに、コントローラは、この方法サービスコントローラは、プロトタイプを実装します
  2. 内部メソッドを使用する場合、所望の方法を取るプロトタイプで始まります

改善されたルータ層

class Controller {
	constructor(app) {
		const { service } = app;
		console.log('service: ', service.test());
		// 将service挂载Controller的原型上
		Controller.prototype = service;
	}
	test() {
		return `Controller for Router`
	}
	async index(ctx) {
		const service = Controller.prototype.service
		ctx.body = await service.index();
	}
}

ここでは、基本的に満たすように設計:

  1. 月によって渡された層に必要なパラメータ
  2. ルータ層をルーティングモニター、及び方法コントローラへのルートに対応する層
  3. コントローラ層サービス層のメソッド呼び出し

サービス層

  • インデックスレイヤメソッドを追加します
class Service {
	constructor(app) {
		console.log('Service: ok');
	}
	test() {
		return `Service for Controller`
	}
	async index() {
		return {
			name: 'marron',
			age: 18,
			remarks: `forever 18`
		}
	}
}

概要

  • これは、ルータ、コントローラ、サービス層内の特定の通信の実現であります
  • 次は、モデル層に追加しました。そして、このシリーズを要約します
公開された177元の記事 ウォン称賛22 ビュー20000 +

おすすめ

転載: blog.csdn.net/piano9425/article/details/103418832