【问题标题】:Route that is executed within another route in Node.js is not being executed在 Node.js 中的另一个路由中执行的路由没有被执行
【发布时间】:2021-06-03 11:29:52
【问题描述】:

晚上好, 我有一个函数,其中包含一个调用 Auth0 API 的路由,并包含从客户端发送的更新数据。该函数运行,但 app.patch() 似乎没有运行,我不确定我错过了什么。

function updateUser(val) {

  

  app.patch(`https://${process.env.AUTH0_BASE_URL}/api/v2/users/${val.id}`,(res) => {

    console.log(val);
    
    res.header('Authorization: Bearer <insert token>)
    res.json(val);
  })
  
  
app.post('/updateuser', (req, ) => {
  const val = req.body;
 
   updateUser(val);
  })

【问题讨论】:

  • 你明白app.patch() 所做的是在你的服务器上注册一个路由处理程序,以便一些带有 PATCH 动词的未来 incoming http 请求可能匹配该路由处理程序。除了为将来注册该路由处理程序之外,它现在不做任何事情。您是否希望向其他主机发送 http 请求并获取响应?
  • 是的,我希望发送一个 .patch()。 auth0 api 使用 PATCH 更新用户

标签: javascript node.js reactjs express http


【解决方案1】:

app.patch() 不会向另一台服务器发送传出请求。相反,它为传入的 PATCH 请求注册一个侦听器。从您的 cmets 看来,这不是您想要做的。

要将 PATCH 请求发送到另一台服务器,您需要使用专为发送 http 请求而设计的库。在 nodejs http 模块中内置了一个低级库,您可以使用 http.request() 来构造一个 PATCH 请求,但通常使用更高级别的库要容易得多,例如 here 中列出的任何一个。

该列表中我最喜欢的是got() library,但该列表中的许多都很受欢迎并被广泛使用。

使用got() 库,您可以像这样发送 PATCH 请求:

const got = require('got');

const options = {
    headers: {Authorization: `Bearer ${someToken}`},
    body: someData
};
const url = `https://${process.env.AUTH0_BASE_URL}/api/v2/users/${val.id}`;

got.patch(url, options).then(result => {
    console.log(result);
}).catch(err => {
    console.log(err);
});

注意:PATCH 请求需要正文数据(与 POST 需要正文数据相同)

【讨论】:

  • 我会试试的,我会告诉你的。谢谢你的回答,有道理。我不知道为什么没有注册,但我很感激。
  • got 库对我不起作用,但我实际上只是使用了 axios,它就像一个魅力!感谢您的帮助。
  • 好的,axios()got()(用于发出 http 请求的库)属于同一个家族。 got() 如果使用得当,可以正常工作,但很高兴你用 axios 解决了这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-11
  • 2021-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-16
相关资源
最近更新 更多