更新: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サーバーコンテキストに渡して、ユーザーベースのルールとアクセス制御を適用することもできます。