Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.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
Javascript 生成Id';s服务器与客户端_Javascript_Node.js_Reactjs_Vue.js_Client Server - Fatal编程技术网

Javascript 生成Id';s服务器与客户端

Javascript 生成Id';s服务器与客户端,javascript,node.js,reactjs,vue.js,client-server,Javascript,Node.js,Reactjs,Vue.js,Client Server,如果我正在使用类似于React/Vue/Angular的东西,或者只是简单地阻止我的页面在使用纯Js提交时加载,我应该在前端为我的元素生成id,还是应该等待服务器用id响应 一个简单的例子是好的旧todo列表,我添加了一个todo,它必须有一个id,所以当我想删除它时,我可以将id发送到服务器。在过去,我常常生成uuid并将其发送到服务器供其使用。我的问题是,这是一种良好的做法,还是我应该采取不同的做法?如果要在服务器中存储数据,则永远不要在客户端中创建元素的ID。您可以添加两次相同的ID,或者

如果我正在使用类似于
React
/
Vue
/
Angular
的东西,或者只是简单地阻止我的页面在使用纯Js提交时加载,我应该在前端为我的元素生成id,还是应该等待服务器用id响应


一个简单的例子是好的旧todo列表,我添加了一个todo,它必须有一个id,所以当我想删除它时,我可以将id发送到服务器。在过去,我常常生成uuid并将其发送到服务器供其使用。我的问题是,这是一种良好的做法,还是我应该采取不同的做法?

如果要在服务器中存储数据,则永远不要在客户端中创建元素的ID。您可以添加两次相同的ID,或者其他用户可以使用与您相同的ID,或者使用无效的ID,或者--您明白了。几乎可以肯定,您可以避免重复在客户端生成UUID的ID,但在服务器中编辑它们更容易、更安全。考虑到在客户端中,您没有任何控制权来控制客户端发送到后端。不管您使用JavaScript做了什么,恶意用户总是可以攻击发送到服务器的请求,并以他们想要的方式修改它,因此您可能会以数据库字段过长的ID结束,或者以无效值结束,或者上帝知道还有什么。

出于已经解释过的原因,生成IDs客户端确实是一种不好的做法。但在我看来,您真正关心的问题是,即使生成ids客户端,您仍然必须等待服务器响应,以确保实际创建了资源。服务器可能暂时关闭,服务器数据库连接可能关闭,磁盘可能出现故障。无论哪种情况,当出现错误时,您都需要这种响应,以获得更好的用户体验。因此,我不认为通过在客户端生成ids实际上是在改善总体用户体验。

由于ids用于唯一标识数据库中的数据,因此您应该始终在服务器端生成ids。另外,这个问题是基于意见的。@PrestonGarvey是的,我知道它们应该是唯一的,而且我在服务器端生成它们更安全,但我要问的是,如果我提交了一些东西并将其发送到服务器以将其存储在数据库中,但不想刷新整个页面并使用javascript将其添加到我的数组中,那么如果我想删除它,我还需要稍后发送id。我是否应该提交表单并等待响应,然后添加元素?这不是违背了不刷新我的页面的全部目的吗?提交表单,将生成的id发送回响应正文,等待它,然后更新列表。我不明白为什么不能异步执行此操作。这听起来像是错误的策略。如果纯粹出于客户端需要(例如,非同步条目的唯一id或React
key
),您仍然可以在客户端使用UUID,但它不能替代数据库id,只是因为使用UUID可能不方便。我是否应该提交表单并等待响应,然后添加元素不一定,出于可用性原因,您可以立即将其添加到DOM中,然后使用响应中接收到的
id
s更新元素,或者在出现错误时删除元素。@EstusFlask谢谢,这正是我想知道的,我只是想知道这样做是否是一种好的做法,这就是我为什么要问这个问题的原因,让我困惑的主要问题是如果我在服务器端生成id,这不意味着我必须等待服务器响应,这不符合不刷新页面的目的吗?不,您可以使用AJAX请求更新任何内容,而无需重新加载页面。如果希望允许用户在本地编辑列表,然后在单个请求中提交所有更改,则可以(如果确实需要)为项目生成临时ID,但决不要使用此类ID将其存储在数据库中。但是,我不明白为什么在这种情况下需要ID,因为您将有对项目本身的引用,您不需要“按ID删除”,因为在这种情况下,项目还不在数据库中。