Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 如何使angular.js$http.post发送包含未定义字段的对象_Angularjs_Node.js - Fatal编程技术网

Angularjs 如何使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

我试图使用angular$http.post方法将更新的对象发送到使用mongoose的node.js后端

我有一个用例,用户可以使一个字段未定义,这是可以的,最终应该使mongoose从mongo文档中取消设置该字段

问题是angular.js$http.post实际上并不发送任何其值未定义的字段

这是我的台词,例如:

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}