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 文档的命令时:

福克斯应用代码:

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

显然这不是匿名回调,对吗?应该是阻塞的。它会阻止服务器吗?这是我真正想知道的,它必须阻止服务器。但我是否也可以在 FOXX-apps 中编写 ArangoDB 数据库命令以进行回调样式等 I/O 操作以避免阻塞?它是 Nodejs 和 javascript 编写非阻塞代码的一大优势。FOXX也可以做到吗?

在 Nodejs 中有一个 javascript 驱动程序以非阻塞方式对 Arango 进行 I/O。

然后在 ArangoDB 中有事务。还有阻塞。但是对于 ACID 事务,我认为阻塞本身是可取的。所以我们不需要回调。

但是在 FOXX 应用程序中访问 ArangoDB 时,为什么没有呢?我错过了什么吗?

如果可能,请帮助我,非常感谢你。

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 回答