javascript - 我如何在 Bookshelf Js 和 knex 中写这个

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

我正在从 bookshelfjs 创建一个简单的 session 存储,但我需要正确设置时间戳列。我正在尝试使用 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 = $1, expiry = (now() + $2 * interval '1 ms') WHERE id = $3;

我确信它与 Knex 的原始查询格式化程序有关,但我在文档中找不到用于设置列值的正确部分。我不想在字符串中编写完整的查询,我想知道如何仅针对单列“expiry”执行此操作。

最佳答案

我还没有测试过这个,请告诉我它是否有效(当然,你需要首先需要 knex):

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

关于javascript - 我如何在 Bookshelf Js 和 knex 中写这个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30775071/

相关文章:

javascript - 在 bookshelf.js 中手动设置时间戳值

javascript - jQuery animate 在 Canvas 上移动文本

javascript - 为命令行创建 JavaScript 应用程序

javascript - Node.js 教程,Http Server 处理错误

node.js - Nodejs - 可以在线程池大小为 4 的同时运行的最大线程是多少?

javascript - 尝试使用 node.js 模块 'replace-in-file' 来查找和替换文件中的多个字符串

javascript - 使用 PhantomJS 获取原始页面内容

javascript - JavaScript 中真正的线程阻塞

mysql - 使用 knex 和 bookshelf 创建数据库和模式的语法?

javascript - 将应用程序与 REPL 一起使用时如何解决 promise