如何在节点书架模型中定义列名?

How to define column name in node bookshelf models?

我在我的 NodeJs 应用程序中使用 Bookshelf 进行数据库操作

我执行时需要:

User = bookshelf.Model.extend({
    tableName: 'users'
});

new User({
   firstName: "John",
   lastName: "Paul"
}).save();

需要在 'first_name' 和 'last_name' 列中保存值

我该如何定义它?

显然没有内置方法可以做到这一点。但是我刚刚在#bookshelf irc 中问了这个问题,有人告诉我:)

var STRING_CAMELIZE_REGEXP = (/(\-|_|\.|\s)+(.)?/g);
var STRING_UNDERSCORE_REGEXP_1 = (/([a-z\d])([A-Z]+)/g);
var STRING_UNDERSCORE_REGEXP_2 = (/\-|\s+/g);

function camelize(str) {
  return str.replace(STRING_CAMELIZE_REGEXP, function(match, separator, chr) {
    return chr ? chr.toUpperCase() : '';
  }).replace(/^([A-Z])/, function(match, separator, chr) {
    return match.toLowerCase();
  });
}

function underscore(str) {
  return str.replace(STRING_UNDERSCORE_REGEXP_1, '_').
    replace(STRING_UNDERSCORE_REGEXP_2, '_').toLowerCase();
}


var _ = require('lodash');
var Podcast = bookshelf.Model.extend({
  parse: function(attrs) {
    return _.reduce(attrs, function(memo, val, key) {
      memo[camelize(key)] = val;
      return memo;
    }, {});
  },
  format: function(attrs) {
    return _.reduce(attrs, function(memo, val, key) {
      memo[underscore(key)] = val;
      return memo;
    }, {});
  }
});


var p = new Podcast();
p.set('lastUpdated', new Date());

具体来说,这会将驼峰式转换为 snake_case。