我如何在 Bookshelfjs 和 knex 中写这个
How do I write this in Bookshelfjs and knex
我正在从 bookshelfjs
制作一个简单的会话存储,但我需要正确设置时间戳列。我正在尝试使用 now() + 1ms 的 ttl 间隔写入列的 ttl,但我不记得如何完成它,或者如何触发该列的原始内容:
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 = , expiry = (now() + * interval '1 ms') WHERE id = ;
我确定它与 Knex 的原始查询格式化程序有关,但我在文档中找不到用于设置列值的正确部分。我不想在字符串中编写完整的查询,我想知道如何只针对单个列 'expiry'.
我还没有测试过这个,告诉我它是否有效(当然你需要先要求 knex):
new this({id: sid}).save({session: session, expiry: knex.raw("(now() + " + ttl + " * interval '1 ms')") });
我正在从 bookshelfjs
制作一个简单的会话存储,但我需要正确设置时间戳列。我正在尝试使用 now() + 1ms 的 ttl 间隔写入列的 ttl,但我不记得如何完成它,或者如何触发该列的原始内容:
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 = , expiry = (now() + * interval '1 ms') WHERE id = ;
我确定它与 Knex 的原始查询格式化程序有关,但我在文档中找不到用于设置列值的正确部分。我不想在字符串中编写完整的查询,我想知道如何只针对单个列 'expiry'.
我还没有测试过这个,告诉我它是否有效(当然你需要先要求 knex):
new this({id: sid}).save({session: session, expiry: knex.raw("(now() + " + ttl + " * interval '1 ms')") });