2016-03-15 71 views
1

我想在輸入消息時在ArangoDB中設置消息收集時間戳。但是,當我在foxx中安裝模型時,如果在模型模式中設置了joi.date()joi.date().timestamp(),它將不起作用。ArangoDB Foxx模型日期時間戳不起作用

我試過使用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,但我還是不明白如何將它集成到控制器中,我希望有一個簡單的解決方案。

+0

答案是否適合您?如果是的話,你能標記它'接受'嗎?如果沒有,缺少什麼? – dothebart

+1

Hi @joes。我的答案能解決你的問題嗎?有什麼你想讓我詳細說明的嗎? –

回答

3

joi中日期類型的問題是JSON不支持日期對象,因此數據庫中和請求中數據的表示形式不匹配(您期望的是毫秒時間戳,但內部日期將爲存儲爲JSON日期字符串)。

如果您需要能夠將日期值轉換爲服務中的日期對象,請嘗試使用joi.date().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: {/* ... */} 
});