【问题标题】:How to read data from collection in an ArangoDB Foxx app?如何从 ArangoDB Foxx 应用程序中的集合中读取数据?
【发布时间】:2015-06-15 21:47:18
【问题描述】:

我有一个名为“用户”的集合,其中包含 1 个文档:

{
  "username": "test1",
  "password": "pw1",
  "id": "1"
}

我创建了一个 Foxx 应用程序并尝试遵循文档(使用 2.6.0a3)。这是我的控制器:

var Foxx = require('org/arangodb/foxx'),
    usersCollection = applicationContext.collection("user");

var usersRepo = Foxx.Repository.extend({
    getAll: Foxx.createQuery(
        'FOR u IN user RETURN u'
    )
});

var controller = new Foxx.Controller(applicationContext);

controller.get('/', function (req, res) {
    res.json(usersRepo.getAll());
});

我得到: {"error":"undefined is not a function"} 而不是记录列表。

我错过了什么?

【问题讨论】:

  • 您是否在文档的某处找到了上面的代码?如果是,您能否发布文档 URL 以便修复示例?谢谢!
  • 和上面不一样,我是从Details on FoxxRepository 部分复制粘贴到My first Foxx App 示例中,但是我没有实例化该类是我的错误。感谢您的关注!

标签: arangodb foxx


【解决方案1】:

据我所知,对Foxx.Repository.extend() 的调用并没有实例化一个可用的存储库对象,而是一个“原型”:

var UsersRepo = Foxx.Repository.extend({
    getAll: Foxx.createQuery(
        'FOR u IN user RETURN u'
    )
});    

似乎缺少的是一个具体的对象实例:

var usersRepo = new UsersRepo("user");

然后可以使用实例调用预定义的函数:

controller.get('/', function (req, res) {
    res.json(usersRepo.getAll());
});

在上面的代码中,我将原型放在名为 UsersRepo(大写 U)的变量中,并将存储库对象实例放在变量 usersRepo(小写 )。

【讨论】:

  • 谢谢!做new UsersRepo 工作。有趣的是,new Foxx.Repositoy.extend({...}) 没有。要求你也看看thissn-p 会不会太过分了?这是我对My first Foxx App 示例的改编,我在.all() 上收到了一个空错误。
  • sn-p 看起来不错。然而,由于usersCollection 显然是null,那么底层的user 集合似乎并不存在。请注意,您的应用通过applicationContext.collection("user") 引用集合,它不会引用名为users 的集合,而是引用以应用程序装载点和下划线为前缀的集合。例如,如果您的应用安装在/foo,那么集合名称将为foo_user。如果您不确定,可以通过require("console").log(applicationContext.collectionName("user")); 透露该系列的名称。
  • 要通过绝对名称引用集合,您也可以使用usersCollection = require("org/arangodb").db._collection("user");
  • 哦,我不知道前缀。非常感谢您的解释! require("org/arangodb").db._collection("user"); 工作就像一个魅力:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多