我正在尝试发送数据来更新我的MongoDB数据库。客户端是Angular,它正确地发送数据。我通过拦截Postman的数据来检查这一点,所以我知道PUT请求有我的数据。
{val1: 'Some Val', val2:[{v21: 'test', v22: 'test', v23: true}]}
我没有在我的请求对象中发送val3。但在Express覆盖的服务器上,我的请求对象是:
{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'
}
}
});
POSTMAN仍显示val2对象,但服务器上的请求对象仍然显示空数组。
答案 0 :(得分:0)
我觉得很愚蠢。我正在访问错误的请求对象值。 req.obj值是发送的默认对象值,而编辑的值在req.body中。
所以
var o = req.body; //instead of req.obj
修正了它。