我在我的Bookshelf
应用程序中使用NodeJs
进行数据库操作
执行时我需要:
User = bookshelf.Model.extend({
tableName: 'users'
});
new User({
firstName: "John",
lastName: "Paul"
}).save();
需要在' first_name'中保存值。和' last_name'列
如何定义此内容?
答案 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。