4

私は Web 開発の初心者で、ノードとエクスプレスを使用して Web サーバーを開発しました。これにはMVCパターンを使用しました.モデルはsequelizejsオブジェクトです。しかし、私のコントローラーの場合、現在OOPはほとんどまたはまったくありません。匿名関数を使用してリクエストを処理するのではなく、オブジェクト指向の方法でコントローラーを作成する方法を知りたいです。

app.get('/test',function(req,res){})

URL とモデルを HTTP 動詞であるプロパティとメソッドとして使用することで、ルートごとにオブジェクトを作成できるかもしれません。

//Use test.model for interacting with model
app.get(test.URL,test.get);
app.post(test.URL,test.post);
app.put(test.URL,test.put);
app.patch(test.URL,test.patch);
app.delete(test.URL,test.delete);

しかし、この方法で作成されたほとんど/すべてのコントローラー オブジェクトは、継承、ポリモーフィズム、および再利用のないシングルトンになってしまうため、やり過ぎのように見えます。

質問: コントローラーを作成するためのより良いオブジェクト指向の方法はありますか?

4

4 に答える 4

1

オブジェクト指向プログラミングを念頭に置いて、高速アプリケーション用のコントローラーを作成する方法を示す簡単な例を TypeScript で作成しました。ES6 に簡単に適用できます。

Server.ts

import * as express from 'express';
import {CategoryController} from 'src/view/CategoryController';

export default class Server {
  public app: express.Application;

  constructor() {
    this.app = express();
    this.app.get('/', (request, response) => response.send('Root page without OOP.'));
    // Using a controller to serve a view
    this.app.use('/categories', CategoryController);
  }
}

CategoryController.ts

import {Router, Request, Response} from 'express';

const router: Router = Router();

router.get('/', (request: Request, response: Response): Response => {
  const payload: { [index: string]: string[] } = {categories: ['CSS', 'HTML', 'JavaScript', 'TypeScript']};
  return response.json(payload);
});

export const CategoryController: Router = router;
于 2017-07-09T17:22:12.870 に答える
0

Express を OOP 方式で編成する 1 つの方法は、このための足場を提供する既存のフレームワークを使用することです。Sails.jsは、現在ノードで最も人気のある MVC フレームワークであり、ルーティングには express.js を使用します。

于 2015-04-04T17:39:57.167 に答える
0

答えにはなりませんが、高速ルートの自動設定を処理するノード モジュールを作成しました。 動的ルート

//app.js
require('dynamic-routes')(app, __dirname + '/routes/');

それから

//routes/index.js
module.exports = {
    priority: 1000, //this is the `/` handler, should it should be the last route.
    path: '/',

    //this function gets passed the express object one time for any extra setup
    init: function(app) { 
        app.head(function(req, res) {});
    },

    GET: function(req, res) {
        res.end('GET ');
    },

    POST: function(req, res) {
        res.json(req.data);
    }
};
于 2013-09-06T16:18:19.610 に答える