Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.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
Node.js 是否应通过正文发送空字符串值?_Node.js_Mongodb_Rest_Restful Url - Fatal编程技术网

Node.js 是否应通过正文发送空字符串值?

Node.js 是否应通过正文发送空字符串值?,node.js,mongodb,rest,restful-url,Node.js,Mongodb,Rest,Restful Url,我们应该根据请求发送null或空字符串值吗 我的意思是我们有一个可选值,它当前有一个值。若use想要删除那个可选字段的值,那个么API应该理解为null还是为空是删除值 例: 在数据库中: { name: "Alex", phone: "012-333.222" } 现在,使用您想要删除他们的电话号码 我们应该定义如下: PUT /users/user-id-1 { phone: null } 这似乎是一个不好的约定不过,在前端,通常取决

我们应该根据请求发送null或空字符串值吗

我的意思是我们有一个可选值,它当前有一个值。若use想要删除那个可选字段的值,那个么API应该理解为null还是为空是删除值

例:

在数据库中:

{
  name: "Alex",
  phone: "012-333.222"
}
现在,使用您想要删除他们的电话号码 我们应该定义如下:

PUT /users/user-id-1
{
  phone: null
}


这似乎是一个不好的约定

不过,在前端,通常取决于是使用删除按钮还是将字段留空

电话:'
-表示用户留下的字段为空

phone:null
-表示用户点击删除字段按钮。您可以决定是删除该字段,还是将文档字段设置为null


我通常会删除该字段,因为它现在没有用处。

如果您只想更新文档中的一个属性,可以使用补丁方法而不是PUT方法,并且您的代码应该如下所示:

PATCH /users/user-id-1
{
     phone: ""
}
我们应该根据请求发送null或空字符串值吗

不在乎;也就是说,它告诉我们使用自描述性消息来表示,但它没有告诉我们文档的表示应该是什么

相反,您希望看到的是消息模式定义,特别是以一种可以向后兼容的方式扩展模式的方式设计您的模式。XML社区花了大量时间探索这些想法;这可能是一个很好的起点


在HTTP中,描述资源更改的基本机制是将PUT命令与新表示的副本一起使用。因此,请求可能如下所示:

PUT /users/user-id-1
Content-Type: application/json

{
  name: "Alex",
  phone: null
}
如果模式的定义方式是,
phone
字段是可选的,并且optional和null是等效的(与其他一些隐含值相反),那么您可以等效地使用:

PUT /users/user-id-1
Content-Type: application/json

{
  name: "Alex"
}
如果表示非常大,并且所做的更改很小,则可能需要支持修补程序

PATCH /users/user-id-1
Content-Type: application/merge-patch+json

{
  phone: null
}

请注意,该规范包括允许客户端发现服务器对资源支持的修补程序表示形式。

但我始终使用DELETE方法删除用户,如果用户请求DELETE/user/user-id-1,API将删除数据库中userId=user-id-1的用户在您的情况下是正确的。在我的api中,当我删除一个用户时,我总是添加参数作为确认代码。用我的视图更新了答案。我不想将空值保存到数据库中,我将删除该字段,但UI上没有删除按钮,用户将删除手机文本框中的值,然后单击更新按钮。前端发送{phone:}或{phone:null},我不喜欢这样,所以我需要一个新的定义。因为如果textbox为空,前端总是发送null,如果UI有很多textbox,API会收到很多null值,并且必须进行meny检查。在这种情况下,用户应该
将{name:'name',phone:'phone',email:'email}
放入其中,您只需更新整个子文档即可。而你却在不断更新。?我不太明白。案例用户删除电话值如何?我不想更新整个文档,我只想更新一些使用really Wastes update的字段您可以做任何您想做的事情。可能只是发送
null
PATCH /users/user-id-1
Content-Type: application/merge-patch+json

{
  phone: null
}