在PUT请求角度表示

时间:2017-02-25 02:24:43

标签: angularjs express

我正在尝试发送数据来更新我的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对象,但服务器上的请求对象仍然显示空数组。

1 个答案:

答案 0 :(得分:0)

我觉得很愚蠢。我正在访问错误的请求对象值。 req.obj值是发送的默认对象值,而编辑的值在req.body中。

所以

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

修正了它。