【发布时间】:2012-01-01 14:30:52
【问题描述】:
我正在为 MySQL ORM 开发一个使用 NodeJS、express、express-resource 和 sequelize 构建的 RESTful api。我希望能够检索一组记录并使用 res.json(records) 进行响应。但是,我无法直接使用 sequelize 返回的集合。当我尝试时,我收到以下错误:
TypeError:将循环结构转换为 JSON
作为一种解决方法,我创建了一个函数,它接受记录输入并返回一个数组:
/**
* takes an Array of records and
* returns a collection
*
* @param {Array} recs
* @return {Array}
* @api public
*/
function recs2Array(recs){
for(var c = 0; c < recs.length; c++){
var collection = [];
(function(c){
// this is crap and must be done for every query
var data = {
id: recs[c]['id'],
gender: recs[c]['gender']
};
collection.push(data);
// debugger;
})(c);
};
return collection;
};
现在,这非常低效,因为我必须手动定义要返回的所有数组键。这意味着我必须在我想为 model.findAll() 的每个 model.find() 的 res.json() 的任何地方使用这种模式。在我的一个资源控制器中,我必须对多个集合执行此操作,从而导致大量额外代码。
为了更好地做到这一点,我正在尝试创建一个动态生成数组键的函数:
/**
* takes an Array of records
* and and Array of fields and returns
* a collection.
*
* @param {Array} recs
* @param {Array} fields
* @return {Array}
* @api public
*/
function recs2ray(recs, fields){
for(var c = 0; c < recs.length; c++){
fields = fields || null;
var collection = [];
(function(c){
for(var i = 0; i < fields.length; i++){
(function(i){
// how do I create dynamic,
// variable key names?
})(i);
}
debugger;
}
};
};
不幸的是,我不确定如何制作动态数组键。我在想我会传入一个预定义的数组,其中包含将在函数调用中映射的字段:
var recs = recs2Array(genders, {['id', 'gender']});
当我这样做时,我觉得在某种意义上正在破坏续集 ORM。所以,我的问题是,“如何将 sequelize 的 model.findAll() 返回的数组中的字段动态映射到推送到返回给调用者的集合的数组?”
【问题讨论】:
标签: arrays node.js dynamic key sequelize.js