2017-02-25 18 views
0

我試圖發送數據來更新我的MongoDB數據庫。客戶端是Angular,它正確地發送數據。我通過郵件攔截數據檢查了這一點,所以我知道PUT請求有我的數據。嵌套的數組對象在PUT請求角度表達後被剝離

{val1: 'Some Val', val2:[{v21: 'test', v22: 'test', v23: true}]} 

我沒有發送val3在我的請求對象中。但我的服務器上,通過快速覆蓋,我的請求對象是:

{val1: 'Some Val', val2:[], val3:{v3:'test'}} 

我已設置:

app.use(bodyParser.urlencoded({ 
extended: true 
})); 
app.use(bodyParser.json({limit: '5mb'})); 

我的控制器代碼:

var obj1 = new ObjService(vm.obj); 
obj1.$update(function (response) { 
    //Returns nothing coz val2.length === 0 
}, function (errResponse) { 
}); 

我的模型

var ObjSchema = new Schema({ 
    val1:{ 
     type:String, 
     default:'' 
    }, 
    val2:[{ 
    v21:{ 
    type: String 
    }, 
    v22:{ 
    type: String 
    }, 
    v23:{ 
    type: Boolean 
    } 
    }], 
    val3:{ 
    v3:{ 
    type:String 
    default: 'test' 
    } 
    } 
}); 

我的快遞中間件

exports.update = function (req, res) { 
    console.log('Inside update'); 
    console.dir(req.obj); //Shows val2:[] 
    var o = req.obj; 
    if(o.val2.length >0){ 
     //Processing val2 - Never gets to this point 
    }else{ 
    res.status(400).send({ 
     message: 'Val2 is empty' 
    }); 
    } 
}); 

我不會在這一點上做任何請求對象的。更新對於val1和val3也絕對正確。

這可能是什麼原因造成的?

編輯:嘗試PUT請求POST和更改的模型轉換爲

var NestSchema = new Schema({ 
v21:{ 
    type: String 
}, 
v22:{ 
    type: String 
    }, 
v23:{ 
    type: Boolean 
} 
}); 

var ObjSchema = new Schema({ 
val1:{ 
    type:String, 
    default:'' 
}, 
val2:[NestSchema], 
val3:{ 
    v3:{ 
    type:String 
    default: 'test' 
    } 
} 
}); 

郵差仍呈現val2的對象,但在服務器上請求對象仍顯示空數組。

+0

請向我們展示處理此問題的快遞中間件 –

回答

0

我感到愚蠢。我正在訪問錯誤的請求對象值。 req.obj值是要發送的默認對象值,而編輯的值是在req.body內。

所以

var o = req.body; //instead of req.obj 

固定它。