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

ArangoDB Foxx Model date timestamp not working

本文关键字:时间戳 不起作用 日期 模型 Foxx ArangoDB      更新时间:2023-09-26

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

我尝试在 joi 文档中使用该示例并将其转换为从测试示例使用。

'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,但我仍然不明白如何将其集成到控制器中,我希望有一个简单的解决方案。

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: {/* ... */}
});