我正在创建一个以SQL Server作为数据库的API。我的表和列使用的Pascal大小写(CountryId
,IsDeleted
等)无法更改。
所以当我这样做时:
const mssql = require('mssql');
var sqlstr =
'select * from Country where CountryId = @countryId';
var db = await koaApp.getDb();
let result = await db.request()
.input('countryId', mssql.Int, countryId)
.query(sqlstr);
我得到的对象是
{
CountryId: 1,
CountryName: "Germany"
}
但我希望成为
{
countryId: 1,
countryName: "Germany"
}
我知道有一个“行”事件,但是我想要更有效的方法(因为我可能从查询中返回几行,上面只是一个例子)。
有什么建议吗?
PS:我想避免使用FOR JSON
语法
答案 0 :(得分:2)
将其发布为实际答案,因为它对OP很有帮助:
如果可行,您可以尝试这样简单地在查询中指定列:
select
CountryID countryId,
CountryName countryName
from
Country
where
CountryId = @countryId
通常,由于性能原因,在查询中始终使用select *
并不是最佳实践。
一个简单的解释,在每个列名(例如CountryName [countryName]
之后的方括号内放置一个空格和一个新名称(或者更好的做法是,这可以在新名称中包含空格之类的字符) )在从SQL返回时,使用您选择的新名称为名称加上别名。
答案 1 :(得分:1)
我建议使用lodash实用程序库转换列名,为此,有一个_.camelCase函数:
_.camelCase('Foo Bar');
// => 'fooBar'
_.camelCase('--foo-bar--');
// => 'fooBar'
_.camelCase('__FOO_BAR__');
// => 'fooBar'
您可以使用Object.entries枚举结果键,然后进行归约,例如
let result = {
CountryId: 1,
CountryName: "Germany"
};
let resultCamelCase = Object.entries(result).reduce((obj,[key,value]) => {
obj[_.camelCase(key)] = value;
return obj;
}, {});
console.log(resultCamelCase);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>