2015-06-11 37 views
0

我正在從bookshelfjs進行一個簡單的會話存儲,但我需要正確設置時間戳列。我想現在寫()+ TTL間隔爲1ms列的TTL,但我不記得如何把它做,或者如何觸發該列的原始內容:我如何在Bookshelfjs和knex中編寫此代碼

var Session = Models.Bookshelf.Model.extend({ 
    tableName: 'sessions', 
    idAttribute: 'id' 
},{ 
    get: Promise.method(function(sid){ 
    console.log("Fetching SID = ", sid); 
    return new this({id: sid}).fetch(); 
    }), 
    set: Promise.method(function(sid, session, ttl){ 
    console.log("Setting SID = ", sid); 
    console.log("Setting SID session = ", session); 
    console.log("Setting SID ttl = ", ttl); 
    new this({id: sid}).save({session: session, expiry: "(now() + " + ttl + " * interval '1 ms')" }); 
    }), 
    destroy: Promise.method(function(sid){ 
    this.destroy({id: sid}); 
    }) 
}); 

原從KOA-PG-會話查詢:

UPDATE %I.%I SET session = $1, expiry = (now() + $2 * interval '1 ms') WHERE id = $3; 

我敢肯定,這與Knex的原始查詢格式,但我無法找到設置該列的值在文檔中正確的部分。我不想在字符串中寫完整的查詢,我想知道如何爲單個列'過期'做到這一點。

回答

3

我沒有測試過這一點,告訴我,如果它的工作原理(你需要首先需要knex,當然):

new this({id: sid}).save({session: session, expiry: knex.raw("(now() + " + ttl + " * interval '1 ms')") }); 
+0

這實際上是我昨晚怎麼想通了,我是來這裏發佈結果: new this({id:sid})。save({session:session,expiry:this.Bookshelf.knex.raw(「(now()+」+ ttl +「* interval'1 ms 「)「)}); –