对ExpressJS应用程序内部的REST请求使用https

AlanObject

从我的expressJS应用程序内部,我必须验证cookie令牌对于后端服务器是否有效。因此,涉及的相关代码如下:

app.get('*', (req, res, next) => {
  console.log('GET: ' + req.path);
    
    // ...

    const payload = JSON.stringify({ authnToken: token });
    const opts = { ... authServerOptions };
    opts.headers['Content-Length'] = payload.length;

    // build request

    const restReq = https.request(authServerOptions, result => {
      console.log('back-end response' + result.statusCode);

      result.on('data', data => {
        next();    // token is good now proceed.
      });

      result.on('error', error => {
        res.redirect('somewhere');  // token is bad or timeout
      });

    });

    restReq.write(token);
    restReq.end();
  }

因此,mainget函数将REST请求设置为活动状态,然后仅返回而无需调用next()或执行任何操作。

问题:

  • 这是执行此操作的正确代码吗?如果从未调用过回调,会发生什么?
  • 在后端服务器返回或超时之前,应用程序是否被阻止处理其他请求?
  • 如果是这样,是否有某种方法可以释放线程以处理更多请求?

在此先感谢您的帮助。我没有找到此代码模式的许多示例,因此,如果有一个链接,将不胜感激。

卢卡斯雷塔

是的,我认为您实施的总体思路是正确的。

我也建议,如注释中所述,使用axios之类的客户端以不太冗长和更全面的方式处理请求,这会使您的代码看起来像这样:

const axios = require('axios');

app.get('*', (req, res, next) => {
  const payload = JSON.stringify({ authnToken: token });
  const opts = { ... authServerOptions };
  opts.headers['Content-Length'] = payload.length;
  axios.post(url, payload, opts)
    .then(response => next())
    .catch(error => {
      console.error(error);
      res.redirect('somewhere');
    });
});

一点,但功能上几乎等同于您的实现。您缺少的一件事是请求对象的onerror回调,该回调当前可能会失败,并且永远不会如您正确怀疑的那样返回响应。您应该添加:

restReq.on('error', error => {
  console.error(error);
  res.redirect('somewhere');
});

同样,调用nextresult可能更合适end,而不是在读取响应数据时这样做:

result.on('end', () => {
  next();
});

然后,您将可以保证将调用回调。

这两种实现都不会阻止对未来请求的处理,因为在两种情况下对令牌验证服务的调用都是异步进行的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何强制ASP.NET应用程序使用HTTPS?

来自分类Dev

Phonegap Android应用程序对HTTPS的ajax请求失败,状态为0

来自分类Dev

IIS7应用程序请求路由HTTPS

来自分类Dev

使用TestFlight分发企业内部应用程序

来自分类Dev

使用REST或SOAP的Magento商店的Android应用程序?

来自分类Dev

使用REST API的Apache Brooklyn应用程序启动

来自分类Dev

使用Spring Security配置应用程序以接受HTTP请求并发送HTTPS响应

来自分类Dev

对WebClient请求使用应用程序池凭据

来自分类Dev

如何使用rest调用终止Spark应用程序?

来自分类Dev

使用Prometheus测量.NET应用程序的传出HTTP请求

来自分类Dev

服务器无法使用从Electron应用程序发送的应用程序/ xml请求

来自分类Dev

在Angular应用程序中使用Typescript读取内部JSON

来自分类Dev

可以跟踪在移动应用程序中使用的请求的Uri

来自分类Dev

使用SoapUI测试REST应用程序的登录功能

来自分类Dev

Facebook REST呼吁使用移动跨平台应用程序

来自分类Dev

使用Facebook请求的android应用程序链接共享

来自分类Dev

内部使用的Facebook应用程序

来自分类Dev

使用Spring Security配置应用程序以接受HTTP请求并发送HTTPS响应

来自分类Dev

使用SilverLight应用程序中的REST API

来自分类Dev

HTTPS请求不适用于android应用程序

来自分类Dev

使用POST调用REST应用程序中的任意处理

来自分类Dev

Azure移动应用程序使用Java内部查询

来自分类Dev

从 Java 应用程序到 TFS REST API 的 HTTP PATCH 请求获得 400(错误请求)错误

来自分类Dev

即使使用 https 也可以嗅探移动应用程序请求吗?

来自分类Dev

配置 OSGI Enroute REST 应用程序以允许异步请求

来自分类Dev

如何使用 Telerik REST API 从 c# 控制台应用程序请求报告

来自分类Dev

每次应用程序在内部版本上运行时,KnownFolders 都会请求许可

来自分类Dev

应用程序请求路由 IIS 负载平衡 HTTPS 设置导致 301 重定向

来自分类Dev

ExpressJs 应用程序中的 cors-js 阻止了应该通过的请求

Related 相关文章

  1. 1

    如何强制ASP.NET应用程序使用HTTPS?

  2. 2

    Phonegap Android应用程序对HTTPS的ajax请求失败,状态为0

  3. 3

    IIS7应用程序请求路由HTTPS

  4. 4

    使用TestFlight分发企业内部应用程序

  5. 5

    使用REST或SOAP的Magento商店的Android应用程序?

  6. 6

    使用REST API的Apache Brooklyn应用程序启动

  7. 7

    使用Spring Security配置应用程序以接受HTTP请求并发送HTTPS响应

  8. 8

    对WebClient请求使用应用程序池凭据

  9. 9

    如何使用rest调用终止Spark应用程序?

  10. 10

    使用Prometheus测量.NET应用程序的传出HTTP请求

  11. 11

    服务器无法使用从Electron应用程序发送的应用程序/ xml请求

  12. 12

    在Angular应用程序中使用Typescript读取内部JSON

  13. 13

    可以跟踪在移动应用程序中使用的请求的Uri

  14. 14

    使用SoapUI测试REST应用程序的登录功能

  15. 15

    Facebook REST呼吁使用移动跨平台应用程序

  16. 16

    使用Facebook请求的android应用程序链接共享

  17. 17

    内部使用的Facebook应用程序

  18. 18

    使用Spring Security配置应用程序以接受HTTP请求并发送HTTPS响应

  19. 19

    使用SilverLight应用程序中的REST API

  20. 20

    HTTPS请求不适用于android应用程序

  21. 21

    使用POST调用REST应用程序中的任意处理

  22. 22

    Azure移动应用程序使用Java内部查询

  23. 23

    从 Java 应用程序到 TFS REST API 的 HTTP PATCH 请求获得 400(错误请求)错误

  24. 24

    即使使用 https 也可以嗅探移动应用程序请求吗?

  25. 25

    配置 OSGI Enroute REST 应用程序以允许异步请求

  26. 26

    如何使用 Telerik REST API 从 c# 控制台应用程序请求报告

  27. 27

    每次应用程序在内部版本上运行时,KnownFolders 都会请求许可

  28. 28

    应用程序请求路由 IIS 负载平衡 HTTPS 设置导致 301 重定向

  29. 29

    ExpressJs 应用程序中的 cors-js 阻止了应该通过的请求

热门标签

归档