如何在发布,放置或删除之后进行获取?

时间:2019-07-20 09:23:36

标签: rest api express websocket socket.io

我有一个用ExpressJS编写的API。现在,我正在使用WebSocket服务器从该API提取数据,但是当我进行一些获取(POST,PUT或DELETE)更新数据库(Postgres)然后进行GET请求时,却遇到了问题。

我期望GET取回所有记录的列表,包括我刚刚更新的记录,但是不包括新记录。

然后,我在更新操作和新GET之间加入了超时。我知道这不是一个好的解决方案,因为当许多用户同时发送请求时,我定义的超时可能无法正常工作。

client.on('deleteData', (id) => { 

fetch(server+id, {
method: 'DELETE',
})
.then (
setTimeout(function(){ 
fetch(server)
.then(response => response.json())
.then(//params separated with ,
responseJson => { 
client.emit('getData', responseJson.data)
client.broadcast.emit('getData', responseJson.data) /
console.log(responseJson.data)
console.log("eliminated!")
}) }, 1000))
.catch((error) =>{
console.error(error)
client.emit('getData', error)
})})

如果我从代码中取出超时,则新的更新(在本例中为DELETE)不会反映在下一个GET中获得的数据集中。

有人可以帮助我找到一种方法来等待确切的时间,以便更新的数据可用于下一个GET吗?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案,GET请求应该在POST回调中:

client.on('eliminarCliente', (id) => { 
  fetch(server+id, {
  method: 'DELETE',
  })
  .then (response => response.json())
  .then (responseJson => {
    fetch(server)
    .then(response => response.json())
    .then(responseJson => { 
      client.emit('getData', responseJson.data)  
      client.broadcast.emit('getData', responseJson.data)
    })
    .catch((error) =>{
    client.emit('getData', error)
    })  
  })
 .catch((error) =>{
    client.emit('getData', error)
 })
})