[英]ArangoDB Foxx Model date timestamp not working
我正在尝试在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: {/* ... */}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.