8

アプリはエクスプレス 3 を使用しています。データベースからデータを取得するルートのベアボーンの例を次に示します。

var Post = mongoose.model('Post')

app.get('post/:id/loompas', function(req, res) {
    Post.getLoompas(function(err, data){
        res.render('x', data)
    })
})

Whereは でインスタンス メソッドとしてPosts.getSomeData定義されており、場合によっては外部 API にアクセスします。/models/post.js

PostSchema.method('getLoompas', function(callback){
    var post = this
    API.get('y', function(x){
        this.save(x)
        callback(x)
    })
})

これはにおいがし始めており、スキーマ定義に沿っているようには見えません。メソッドのコレクションは非常に大きくなる可能性があります。

これらの問題を分離し、過度に太ったモデルを回避するために推奨される設計パターンは何ですか? 外部 API 呼び出し用のサービス層? 興味深いソリューションはありますか?

4

2 に答える 2

1

これは確かに少しにおいがします。Web アプリを単にアプリケーションのビューと見なすアプローチを使用します。

これを確実にする最善の方法は、Web アプリケーションからマングース モデルを使用しないことです。Web アプリケーションをプロセス内に置き、モデル固有のロジックを別のプロセス内に置くことができます。その 2 番目のプロセスの仕事は、ビジネス ロジックと永続化レイヤー (mongoDB) を処理して、MVCのMにすることです。

外部 API へのアクセスはそのモデル レイヤーで行われるため、永続化の実装から分離することができます。

私が気に入っているノード プロセス間で通信する方法があります。それはdnodeです。セットアップが完了すると、独自のプロセス内でオブジェクトやコールバックと通信しているように見えます。データを取得するために、これを介して Web アプリとビジネス アプリが通信するようにします。webapp は実際のデータを操作する必要はなく、代わりにモデル層にメッセージを送信します (MVC パターンで説明されているように)。

これにより、コントローラー/ビュー (webapp) とモデル + 永続性が完全に分離されます。

この構成の 1 つの副作用は、アプリケーションの他のクライアント (CLI クライアントや RESTful API など) を簡単に作成できることです。

于 2013-02-05T15:00:13.197 に答える
0

URL (post/:id/:somedata) から id と somedata を取得しようとしていますか? スキーマを構築するには?

理想的には、次のものを使用する必要があります。

app.post('/reg', function(request, response){

console.log(request.body.name);
console.log(request.body.email);
...
}

これは、オブジェクトのすべての変数 (名前、電子メール) を設定できる「reg」HTML フォーム ページでフォームが送信されたときです。app.post では、URL をスキャンして変数を取得することなく、リクエスト自体からスキーマ定義を取得できます。

URL から変数を取得する方法を知りたい場合は、app.get で次のようにします。

vars=request.url.split('/');
//vars contains all the variables you have to use.
//use vars to create schema

スキーマを取得/作成した後、それを関数に直接渡すか、その関数を呼び出すオブジェクト要素を反復処理します。

于 2013-02-07T10:25:33.447 に答える