1)问题:我想知道,如何在foxx应用程序中要求和使用节点模块。
我想使用名为:node json rpc by nemopersona的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

显然那不是匿名回拨,对吗?一定是堵住了。它会阻塞服务器吗?这就是我真正想知道的,它必须阻止服务器。但是,我是否也可以在foxx应用程序中为i/o操作编写arangodb数据库命令,比如回调样式,以避免阻塞?这是nodejs和javascript编写非阻塞代码的最大优势。用Foxx也能做到吗?
在nodejs中有一个javascript驱动程序,它以非阻塞的方式对arango进行i/o操作。
然后在arangodb中有事务。也有阻塞。但对于acid事务,我认为阻塞本身是可取的。这样我们就不需要回拨了。
但是在foxx应用程序中访问arangodb时,为什么不存在呢?我遗漏了什么吗?是吗?
如果可能的话请帮助我,谢谢你。

最佳答案

(1)我认为为了让“node json rpc”模块工作,需要支持与node.js兼容的“http”模块。你应该联系谷歌集团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通信不同的是,没有可对其作出反应的单个事件。因此,使用工作线程要快得多。

关于node.js - ArangoDB:有关FOXX的一些问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24099605/

10-12 13:33