我如何在Bookshelfjs和knex中写这个

时间:2015-06-11 08:06:39

标签: javascript node.js bookshelf.js knex.js

我正在从bookshelfjs创建一个简单的会话存储,但我需要正确设置timestamp列。我试着用now()+ ttl间隔1ms编写列的ttl,但我不记得如何完成它,或者如何触发该列的原始内容: / p>

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-session的原始查询是:

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

我确定它使用Knex的原始查询格式化程序,但我无法在文档中找到设置列值的正确部分。我不想用字符串写完整个查询,我想知道如何只为单个列“到期”#。

1 个答案:

答案 0 :(得分:3)

我没有对此进行测试,请告诉我它是否有效(当然,您需要首先使用knex):

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