代码之家  ›  专栏  ›  技术社区  ›  skinneejoe

检索文档时,arangodb_密钥正在更改

  •  0
  • skinneejoe  · 技术社区  · 7 年前

    我用的是阿兰戈3.3.10

    如果我运行来自arangodb Web界面中“查询”工具的查询,则不会执行此操作。有什么想法吗?

    username email

    如果我登录到数据库Web界面,我就可以看到单独的文档,并且每次调用我的FoxAPI时,我都可以看到_键、_rev和_id都会发生变化。据我所知,.firstexample函数不应该产生这个结果。

    设置为字符串“admin”。如果我改变

    我相信这是一个bug,但我不知道这是db中的bug还是arangojs驱动程序中的bug。我倾向于使用ArangoJS驱动程序,因为在使用ArangoDB Web界面中的查询工具运行查询时,这种行为没有表现出来。

    我已经将代码缩小到绝对必要的范围,并且安装脚本仍然被触发:

    'use strict'
    const userRoutes = require('./user-routes')
    module.context.use(userRoutes)
    

    'use strict'
    const joi = require('joi'
    const createRouter = require('@arangodb/foxx/router')
    const usersColl = module.context.collection('users')
    const router = createRouter()
    router
      .post('/test', function (req, res) {
        const username = req.body.username
    
        try {
          const user = usersColl.firstExample('username', username)
          res.send(user)
        } catch (e) {
          res.throw(404, e)
        }
      })
      .body(
        joi
          .object({
            username: joi.string().required()
          })
          .required(),
        'Username'
      )
      .summary('Username test')
      .description('Username test')
    

    {
      "engines": {
        "arangodb": "^3.0.0"
      },
      "main": "index.js",
      "scripts": {
        "setup": "scripts/setup.js"
      },
      "provides": {
        "@pulse/user-mgmt": "1.0.0"
      }
    }
    

    3 回复  |  直到 7 年前
        1
  •  1
  •   David Thomas    7 年前

    如前所述,每次调用服务时,似乎都在运行“scripts/setup.js”,而foxx微服务则在“开发”模式下运行。如果在“生产”模式下运行,它将只在服务器启动时运行一次安装程序,然后将编译后的代码版本保持缓存状态。

    “开发”模式在使用类似于Webstorm的IDE的情况下非常有用,它会自动将代码从git目录部署到微服务的arangodb app目录中。这很有用,因为代码的每一个更改都反映在微服务的下一个执行周期中。

    当性能成为一个问题时,不要以“开发”模式运行Foxx微服务,或者在安装脚本中存在显著的逻辑,这很重要,因为它确实会降低速度。

    很高兴我们找到了问题的根源,这是一个很好的教训。

        2
  •  2
  •   stj    7 年前

    firstExample 将检索与指定模式匹配的文档。如果多个文档与模式匹配,那么将返回其中一个文档。但是它是不可预测的匹配文档中的哪一个。

    因此,如果多个文档符合条件,则 第一个例子 你可能会得到一个“随机”的。 用户名属性上是否有唯一的索引,因此要确保每个用户名最多有一个文档?

    如果是这样,请共享您正在使用的确切命令,包括检索文档,以及有关集合中的示例文档及其索引。

        3
  •  0
  •   skinneejoe    7 年前

    我解决了。似乎必须保留用户名admin,因为只有在尝试获取具有该用户名的用户时才会出现问题。其他用户返回罚款。我将不得不更改安装脚本以创建具有不同名称的默认用户。

    更新 另外,我不是从系统中提取用户集合,这是我自己的自定义集合。文档中有一个名为用户名的字段。如果此字段设置为“admin”,则会出现上述问题。似乎是一只很奇怪的虫子。