【问题标题】:Nodejs get api parameter not updated after first call第一次调用后Nodejs获取api参数未更新
【发布时间】:2021-07-28 02:25:02
【问题描述】:

我有一个函数,在发出post 请求后,必须进行get api 调用。我尝试通过从帖子中调用一个函数来实现这一点。

app.post('/',function(req,res){
   res.send(req.body);
   callGet(req.body)
})

function callGet(value){              // value updated after every call
 app.get('/val',function(req,res){
     getVal(value);                  // value doesn't update after first call
function getVal(value){
 #do something
}
res.send(resultFrom_getVal)
})
}

post 传递的参数在每次调用后都会在callGet(value) 中更新,但不会在第一次调用后反映在getVal(value) 中。因此,在每篇文章之后,它都会呈现第一个 post 调用参数。如果我的实现方式错误,请纠正我,我是使用 REST api 的新手。

【问题讨论】:

    标签: node.js api rest express


    【解决方案1】:

    你所有的功能callGet() 正在做的就是注册一个路由。它没有调用那条路线。而且,即使是这样,您也会尝试对同一请求发送两个响应,而您也无法做到。每个传入请求都会得到一个响应。

    您也不应该在路由处理程序中注册路由,因为它们只会在每次触发顶级路由时堆积起来。

    如果您想要从两个不同的路由执行相同的代码,那么只需创建一个可以从两个路由调用的通用 Javascript 函数(不是路由)。该函数可以处理一些数据并返回结果,然后每个路由可以使用这些结果发送自己的响应。

    如果您尝试将 POST 请求中的数据传递给后续请求,则有多种选择:

    1. 您可以重定向到 GET 请求并将数据作为 URL 中的查询参数传递。
    2. 您可以将数据存储在服务器端会话中,因此在来自该客户端的下一个/val GET 请求时,路由可以从该特定客户端的服务器端会话对象中获取数据并将其用于处理GET 请求。这打破了 REST API 的一般理论,因为 GET 请求返回的内容将取决于它之前发生的事情,而不是每次都获取相同的资源(因此这不会是 RESTful)。
    3. 您可以从 POST 将数据返回给客户端,客户端可以保存数据并将其用作未来 GET 请求的参数。如果实施得当,这可能是 RESTful 的。这也避免了在可能的情况下存储通常需要的服务器端状态。

    【讨论】:

      猜你喜欢
      • 2020-04-13
      • 2020-04-29
      • 1970-01-01
      • 1970-01-01
      • 2019-11-30
      • 2014-04-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多