ArangoDB:关于FOXX的一些问题

时间:2014-06-07 17:02:22

标签: node.js rpc node-modules arangodb

1.)问题:我想知道,我如何在FOXX应用程序中要求和使用节点模块。

我想使用名为nemopersona的NPM模块:node-json-rpc作为客户端。可能也作为服务器。但至少作为客户端可以通过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

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

(1)我认为为了使“node-json-rpc”模块工作,需要支持node.js兼容的“http”模块。您应该与Google论坛https://groups.google.com/forum/?hl=de#!forum/arangodb

联系

(2)ArangoDB是多线程的。它使用非阻塞I / O和worker来处理请求。因此它不会阻止服务器。如果你写

var accountdoc;
accountdoc = db.mysupercollection.document('rumpelstilzchen'); // find doc by _key
在你的Foxx应用程序中,这将在一个工作线程中执行。将此调用异步化是非常困难的,因为与I / O通信不同,没有单一事件可以作出反应。因此,使用工作线程要快得多。