javascript - ArangoDB Foxx 模型日期时间戳不起作用

标签 javascript arangodb foxx

我正在尝试在 ArangoDB 中设置一个消息集合,在输入消息时添加时间戳。但是,当我在 foxx 中设置模型时,如果我在模型架构中设置 joi.date()joi.date().timestamp() 将不起作用.

我尝试使用 joi documentation 中的示例并将其转换以供测试示例使用。

'use strict';
var Foxx = require('org/arangodb/foxx');
var joi = require('joi');

var  now = new Date();
var javascriptTimestamp = now.getTime();
var unixTimestamp = now.getTime() / 1000;

class TestMessage extends Foxx.Model {

}

TestMessage.prototype.schema = joi.object().options({abortEarly: false}).keys({
    unix: joi.date().timestamp('unix'),
    message: joi.string()

});

TestMessage.prototype.beforeUpdate = function() {
    this.set({unix: now.getTime()});
};

module.exports = TestMessage;

当我保存它并去测试它时,模型不会显示或响应开发页面上的任何内容。

我怎样才能让它正确设置日期和/或时间戳?

我唯一能做的就是直接使用 AQL,但我仍然不明白如何将它集成到 Controller 中,我希望有一个简单的解决方案。

最佳答案

joi 中日期类型的问题是 JSON 不支持日期对象,因此数据库中数据的表示和请求中的数据将不匹配(您期望毫秒时间戳,但在内部将存储日期作为 JSON 日期字符串)。

如果您需要能够将日期值转换为服务中的日期对象,请尝试使用 joi.date().iso()。 iso 变体将解析 JSON.stringify 使用的格式,因此数据将在往返过程中幸存下来:

let isoDate = JSON.parse(JSON.stringify(new Date());
let result = joi.date().iso().validate(isoDate);
let joiDate = JSON.parse(JSON.stringify(result.value));
assert.equal(isoDate, joiDate);

您还应该使用基于函数的模型扩展而不是基于类的语法。由于引擎限制,基于类的语法被恢复,尽管文档显然还没有完全调整:

const Foxx = require('org/arangodb/foxx');
const TestMessage = Foxx.Model.extends({
  schema: {/* ... */}
});

关于javascript - ArangoDB Foxx 模型日期时间戳不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36018575/

相关文章:

arangodb - 如何将我的 arangodb docker 容器从 2.3.4 升级到 2.4.0

java - AQL-在 Arangodb 中可以实现预期连接以及如何实现?

arangodb - 将 GraphiQL 与 Foxx 结合使用

javascript - 合并 2 个对象数组,其中一个设置键,另一个设置值

javascript - 不能从函数访问 opencv.js 属性和方法

javascript - 制作带点的输入字段掩码

javascript - 代码在 JSFiddle 中隔离时可以工作,但在站点中时会出现错误

arangodb - 当图遍历的级别加深时,性能会急剧下降

debugging - Foxx 应用程序 - 远程调试/断点

arangodb - 如何在 ArangoDB FOXX 中定义索引?