首页 文章

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

提问于
浏览
1

如果我在模型架构中设置了 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,但我还是不明白如何将它集成到控制器中,我希望有一个简单的解决方案 .

1 回答

  • 3

    joi中日期类型的问题是JSON不支持日期对象,因此数据库和请求中的数据表示将不匹配(您期望毫秒时间戳,但在内部,Date将存储为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: {/* ... */}
    });
    

相关问题