如何在Sails JS Controller中操作JSON数据

时间:2018-05-08 14:32:13

标签: sails.js waterline

我试图操纵JSON数据并返回修改后的数据。但是,即使定义了变量,它也会给出错误ReferenceError: manufacturer_tab_list is not defined

getfields: function(req, res){
        Manufacturers.find({id: '5af01c0e712f4c05b27af99c'})
        .populate('manufacturer_tabs')
        .exec(function(err, manufacturer_tabs){
            var manufacturer_tabs_list = res.json(manufacturer_tabs);
            manufacturer_tabs_list[1].name = 'Tab 2';
            if(err){
                return res.json(err);
            }
            return manufacturer_tab_list;
        })                                                         
    },

2 个答案:

答案 0 :(得分:0)

您的变量名称中有拼写错误,manufacturer_tabs_list而非manufacturer_tab_list

修改

getfields: function(req, res){
    Manufacturers.find({id: '5af01c0e712f4c05b27af99c'})
    .populate('manufacturer_tabs')
    .exec(function(err, manufacturer_tabs){
        manufacturer_tabs[1].name = 'Tab 2';
        if(err){
            return res.json(err);
        }
        return res.json(manufacturer_tabs);
    })                                                         
},

答案 1 :(得分:0)

可能想尝试一下:

getfields: function(req, res){

   Manufacturers.findOne({id: '5af01c0e712f4c05b27af99c'})
    .populate('manufacturer_tabs')
    .exec(function(err, manufacturer){
        if(err){
            return res.serverError(err);
        }
        var manufacturer_tabs_list = _.cloneDeep(manufactuurer.manufacturer_tabs);
        manufacturer_tabs_list[1].name = 'Tab 2';
        return res.json(manufacturer_tab_list);
    })                                                         
},

我使用findOne而不是find来返回manufacturer_tabs集合属性的单个制造商对象。然后我克隆它,这样就不再是模型对象了(如果是帆1.0,那么你就不需要_.cloneDeep(),并且可以改变数据,如manufacturer.manufacturer_tabs.name ='Tab 2';)。

我会在第一个错误判断之后立即进行一些额外的错误处理,例如:

if (!manufacturer || !manufacturer.manufacturer_tabs || !manufacturer.manufacturer_tabs.length > 1) {
    return res.serverError('Can\'t find data'); 
}

当然,对你有用的东西。干杯