Angularjs 如何使angular.js$http.post发送包含未定义字段的对象
我试图使用angular$http.post方法将更新的对象发送到使用mongoose的node.js后端 我有一个用例,用户可以使一个字段未定义,这是可以的,最终应该使mongoose从mongo文档中取消设置该字段 问题是angular.js$http.post实际上并不发送任何其值未定义的字段 这是我的台词,例如:Angularjs 如何使angular.js$http.post发送包含未定义字段的对象,angularjs,node.js,Angularjs,Node.js,我试图使用angular$http.post方法将更新的对象发送到使用mongoose的node.js后端 我有一个用例,用户可以使一个字段未定义,这是可以的,最终应该使mongoose从mongo文档中取消设置该字段 问题是angular.js$http.post实际上并不发送任何其值未定义的字段 这是我的台词,例如: return $http.post(`/api/update`, { field1: 1, field2: 'h
return $http.post(`/api/update`, {
field1: 1,
field2: 'hey',
field3: undefined
});
然后,如果我使用开发人员工具查看一下,我将看到发送的对象只包含前两个字段
我应该怎么做才能使$http也发送未定义的字段?
未定义的
不是JSON的一部分。根据,JSON的有效值类型为:string
,number
,object
,数组
,真
,假
和空
,无未定义
但是,如果您确实想将未定义的值发送到后端,您可以覆盖JSON.stringify
,因为Angular的$http.post
最终使用JSON.stringify
转换请求数据中的JavaScript对象(有关代码跟踪,请参阅):
这样,请求有效负载将是:
{"x":42,"y":"ui","d":"ppp","z":undefined}
请注意:在后端,您需要定义相应的newParse
函数,JSON.parse
不能直接用于解析上述字符串。为什么不传递field3:'
而不是未定义?一个空字符串,而不是“undefined”,因为mongoose不会处理与undefined相同的“”。undefined将使mongoose取消设置该字段,而“”不会,因为该字段是对另一个对象的引用undefined
与javascript相关,这意味着未声明标识符。因此,当您发送未定义时,必须将其转换为公共基,这是通过从正在发送的对象中删除它来实现的,因为您明确提到field3
未定义。您尝试执行的方案应该在服务器端处理,如果特定的字段不存在,则将其作为未定义的发送给mongoose。您无法从客户端为您的场景做太多工作。您是否尝试过发送null
而不是未定义的?它可能不会让mongoose取消设置字段值,但肯定比使用空字符串检测条件要好,并按照上述建议在服务器上手动取消设置值。
{"x":42,"y":"ui","d":"ppp","z":undefined}