如何在节点书架模型中定义列名?
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。
我在我的 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。