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

时间:2015-02-10 20:20:01

标签: javascript database node.js model bookshelf.js

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

执行时我需要:

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

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

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

如何定义此内容?

1 个答案:

答案 0 :(得分:4)

显然没有内置的方法来做到这一点。不过我刚刚在#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, '$1_$2').
    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());

详细说明,这会将camelCase变成snake_case。