3

jquery mobileを使用してフロントエンドが構築されたアプリケーションを開発しています。このアプリケーションは、さまざまな情報を取得するためにデータベースへのアクセスを必要とします。また、データベースを更新する必要があります。

アプリケーションのフロントエンドを同期するために、node.js を中間層として使用することを考えています。node.js を選択したのは、適切にスケーリングする必要があるためです。この中間層は、必要なすべての必要なデータをフロントエンドに提供します。また、フロントエンドからデータを受け取り、バックエンド データベースを更新します。

問題は、かなり複雑な構造と関係を持つデータです。手動でデータ モデルをプレーンな JSON に変換したり、プレーンな JSON から変換したりするのは非常に面倒です。そのため、他のモジュール/フレームワークも使用することを考えていました。データモデルを形成し、OpenData プロトコルを使用してそれらを公開できるようにJaydataを試しましたが、ドキュメントが不足しているようです。Sequelizeの使用についても検討しましたが、現時点ではデータベース (トリガー、プロシージャ、およびすべて) を十分にサポートしていないと思います。

では、この時点で要件を満たすために何を使用できますか? 私の要件を満たすノードモジュール/フレームワークはありますか?それとも、生のコードを使用してバックエンドからデータを取得し、適切なモデルに変換して提供する必要がありますか?

バックエンド データベースとして Postgresql を使用しています。当分の間、私のフロントエンドは jquery mobile を使用して作成されていますが、別のテクノロジ (PHP/ASP.NET) を使用して構築することを選択する場合があります。

4

1 に答える 1

6

更新:NodeJSプラットフォーム用のJayData Serverには多くの改善があります。たとえば、ナビゲーションプロパティがMongoDBでサポートされるようになりました。また、システムの使用は非常に簡単になりました。独自のMongoDBバックミドルティアサーバーをセットアップする方法の詳細をお読みください。

制限が許容範囲内であれば、JayDataを実際に使用できます。

  • サーバー側では、JayDataはNodeJSパッケージとして実行され、sqLiteとmongoDBをサポートします。1.3が1月に登場すると、mysqlとMSSqlServerのサポートが追加されます。JayDataは、実際にはサーバー側データベースをOData V2準拠のエンドポイントとして公開しており、1月にV3がサポートされる予定です。

  • SqLiteにはナビゲーションプロパティがありますが、mongoDBにはパフォーマンスがあります。本番サイズの実装では、mongoDBのみが実行可能な方法です。制限は、現在、JayDataがmongoDBとの自動関係(ナビゲーションプロパティ)をサポートしていないことです。ナビゲーションプロパティが1.3のmongoDBプロバイダーでサポートされることを確認できます

  • ここで実現できるのは、1..nおよび1..1リレーションを実装するための参照フィールドを持つ複雑なサーバー側モデルを作成することですが、ナビゲーションプロパティに基づいてクエリを実行したり、使用したりすることはできません。サーバーシェイプの深いツリーへの「インクルード」演算子。

私は、JayDataを使用してNodeJS / mongoDBプラットフォームでモデルを公開し、ここで修正する方法についての小さな例を準備しています。

更新:または、JavaScript APIサービス(JayDataの低レベルAPI)を使用して独自のデータAPIを実装し、サービス関数を使用してAPIサーフェスをODataエンドポイントとして公開することもできます。これをチェックしてください:http://jaystack.com/blog/create-your-first-online-api-with-javascript-api-services。(この記事ではJayStormサービスについて何度も言及していますが、説明されている手法はローカル構成にも適用されることに注意してください。

JavaScriptDataServicesまたはJavaScriptAPIServicesのいずれかを使用して独自のJayDataでバックアップされたNodeJS中間層レイヤーを起動する手順は次のとおりです。JayDataで公開するコードは、ODataプロトコルで公開され、クライアントでJayDataを使用すると、結果が型付きの結果ツリーに変換されます。

ODataプロトコルレイヤーはConnect/Expressミドルウェアであるため、JayDataをサーバーとして使用するには、どちらかを使用する必要があることに注意してください。

クリーンなLinuxシステムでの準備、ほとんどの手順は必要ないかもしれません

bash$
    sudo apt-get install mongodb
    sudo add-apt-repository ppa:chris-lea/node.js 
    sudo apt-get install nodejs nodejs-dev
    sudo apt-get install  npm build-essential make autoconf libtool flex bison git libxml2-dev
    mkdir test; cd test
    npm install mongodb express http connect q node-uuid bcrypt xmldom qs
    npm install jaydata

1)mongoDBバックエンドなしでAPIサービスクラスを作成して起動します。

/*** begin server.js ***/
var c = require('express');
require('jaydata');
window.DOMParser=require('xmldom').DOMParser;
require('q');

$data.ServiceBase.extend("myapi", {
    helloWorld: function() {
       ///<returns type="string" />
       return "Hello JavaScript Server World";
    }
});
myapi.annotateFromVSDoc();    
var app = c();

app.use(c.query());
app.use(c.bodyParser());
app.use("/test", $data.JayService.OData.Utils.simpleBodyReader());
app.use("/test", $data.JayService.createAdapter(myapi, function (req, res) {
    return new myapi();
}));
app.listen(8080);

/*** end server.js ***/

次のコマンドでhelloWorldを呼び出します。

bash$: curl http://localhost:8080/test/helloWorld

上記のブログ投稿は、この点からより多くを示しています

2)mongoDBでサポートされたJavaScriptデータサービスを作成します

/* begin server.js */
var c = require('express');
require('jaydata');
window.DOMParser=require('xmldom').DOMParser;
require('q');
var app = c();
app.use(c.query());
app.use(c.bodyParser());
app.use(c.cookieParser());
app.use(c.methodOverride());

$data.Class.define("test.Product", $data.Entity, null, {
    Id: { type: "id", key: true, computed: true, nullable: false },
    Name: { type: "string" },
    Price: { type: "integer" }
}, null);

$data.Class.defineEx("test.Context", [$data.EntityContext,$data.ServiceBase], null, {
    Products: { type: $data.EntitySet, elementType: test.Product }
});
test.Context.annotateFromVSDoc();

app.use("/test", $data.JayService.OData.Utils.simpleBodyReader());
app.use("/test", $data.JayService.createAdapter(test.Context, function (req, res) {
    return new test.Context({name: "mongoDB", databaseName:"test", address: "localhost", port: 27017 });
}));
app.use(c.errorHandler());
app.listen(8080);
/* end server.js */

「テスト」データベースはODataプロトコルで公開されているため、任意のAJAXツールからCRUD操作を実行できますが、datajsまたはJayDataをお勧めします。

また、Data Serviceクラスを使用すると、挿入するデータを変更したり、操作をキャンセルしたりできるサーバー側のイベントハンドラーを定義できることに注意してください(SQLの世界のトリガーのように)。また、承認ロジックをJayDataサーバーコンテキストに渡して、ユーザーベースのルールとアクセス制御を適用することもできます。

于 2012-10-15T09:05:35.527 に答える