3

1.) 質問: FOXX アプリケーション内でノード モジュールを要求して使用するにはどうすればよいか知りたいです。

nemopersona の node-json-rpc という名前の NPM モジュールをクライアントとして使用したいと考えています。おそらくサーバーとしても。しかし、少なくともクライアントとしては、便利な RPC によって別の場所からデータをフェッチします。

FOXX はその特定の行が気に入らないようです。この行を foxx アプリに追加するとすぐに、エラーがスローされます。

var rpc = require('node-json-rpc');

NPM モジュール (パッケージ) を次のようなさまざまなディレクトリに追加しました。

/myfoxxappdirectory/node_modules
/usr/share/arangodb/js/common/modules
/usr/share/arangodb/js/node/node_modules

変更を加えたら、Arangodb サーバーを再起動します。しかし、それはモジュールが好きではありません。また、特にその行が好きではないと思います:

// Create a server object with options
var serv = new rpc.Server(options);

ここでは、動作していない FOXX アプリの完全なコードを確認できます。

(function () {

var rpc = require('node-json-rpc'); // FOXX throws error at that line

    //"use strict";

    var Controller = require("org/arangodb/foxx").Controller,
        Repository = require("org/arangodb/foxx").Repository,
        console = require("console"),
        arangodb = require("org/arangodb"),
        db = arangodb.db,
        actions = require("org/arangodb/actions"),
        //helloworld = require("./lib/a").text,
        controller = new Controller(applicationContext),
        central = new Repository(controller.collection("centraladdressdb"));

    // .............................................................................
    // Example: Route without parameters & simple text output with static text
    // .............................................................................

    controller.get('/hello', function (req, res) {
        res.set("Content-Type", "text/plain; charset=utf-8");
        res.body = "blabla it works!\n";
    });

}());

2.) 質問: FOXX コマンドは純粋な Nodejs のように非同期ですか? たとえば、FOXX アプリケーションで ArangoDB ドキュメントを検索するコマンドを見ると、次のようになります。

FOXX アプリケーション コード:

var accountdoc;
accountdoc = db.mysupercollection.document('rumpelstilzchen'); // find doc by _key

明らかにそれは匿名のコールバックではありませんよね? ブロックしている必要があります。そして、それはサーバーをブロックしますか? これは私が本当に疑問に思っていることです。サーバーをブロックする必要があります。しかし、ブロックを回避するためにコールバック スタイルのような I/O 操作のために、FOXX アプリで ArangoDB データベース コマンドを記述することもできますか? Nodejs と JavaScript の大きな利点は、ノンブロッキング コードを記述できることです。FOXXでもできますか?

Nodejs には、ノンブロッキング スタイルで Arango への I/O を行う JavaScript ドライバーがあります。

次に、ArangoDB にトランザクションがあります。ブロッキングもあります。しかし、ACID トランザクションの場合は、ブロック自体が望ましいと思います。したがって、コールバックは必要ありません。

しかし、ArangoDB にアクセスするときの FOXX アプリケーションでは、なぜそこにいないのでしょうか? 私は何かが欠けていますか??

可能であれば私を助けてください、そしてあなたに感謝します。

4

1 に答える 1

1

(1)「node-json-rpc」モジュールを機能させるには、node.js互換の「http」モジュールのサポートが必要だと思います。Google グループhttps://groups.google.com/forum/?hl=de#!forum/arangodbに連絡してください。

(2) ArangoDB はマルチスレッドです。ノンブロッキング I/O とワーカーを使用してリクエストを処理します。したがって、サーバーをブロックしません。あなたが書くなら

var accountdoc;
accountdoc = db.mysupercollection.document('rumpelstilzchen'); // find doc by _key

Foxx アプリケーションでは、これはワーカー スレッドで実行されます。I/O 通信とは異なり、反応する単一のイベントがないため、この呼び出しを非同期にすることは非常に困難です。したがって、代わりにワーク スレッドを使用する方がはるかに高速です。

于 2014-06-09T11:25:51.733 に答える