2

データベース操作用のアプリケーションで使用BookshelfしていますNodeJs

実行するときに必要です:

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

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

「first_name」列と「last_name」列に値を保存する必要があります

これを定義するにはどうすればよいですか?

4

1 に答える 1

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 に変わります。

于 2015-02-12T22:33:25.407 に答える