【问题标题】:Is there any way to return a plaintext response with React, containing no HTML at all?有没有办法用 React 返回纯文本响应,根本不包含 HTML?
【发布时间】:2020-07-25 05:43:26
【问题描述】:

我需要能够返回一个有效的 JSON 响应,而没有 HTML 包装它。我可以通过指定一个直接指向我的 Express 后端的端口号来实现这一点,但需要能够返回纯 JSON,而不必在生产中指定端口号。如果您同时使用 React/React-Router 和 Express,有什么办法可以做到这一点?

此设置使用代理通行证来工作:

server {
    listen 80;
    listen [::]:80;
    server_name example.com;

    location / {
        proxy_pass http://localhost:5000;
    }
}

当前输出:https://socialmaya.com/u/real(1)

所需输出:http://socialmaya.com:5000/actors/real (2)

所以我需要 1 的输出与 2 完全相同,以确保另一台服务器可以读取它。如果你点击查看两者的页面源,你可以看到输出不一样。

【问题讨论】:

  • 作为参考,我问了另外两个与此问题相关的问题:stackoverflow.com/questions/61160329/…stackoverflow.com/questions/61162675/…
  • 在我看来,是 URI /u/real vs /actors/real 引入了 JSON vs HTML?它与https 与端口 5000 无关。
  • 没错。我只能通过端口 5000 访问/actors/real 的原因是 Express 正在侦听该端口。如果我尝试通过 https 访问该 URI 并且没有指定端口号,React/React-Router 会呈现 404 页面。我不确定,但似乎 React-Router 阻止了对 Express 路由的任何访问,除非它们在组件中被调用。
  • 你的问题是,如何在将/u/real 重写为/actors/real 之前将其传递到上游?试试rewrite ^/u/(.*)$ /actors/$1 last;
  • 成功了,谢谢!还有另一种方法吗?这意味着必须在 Nginx 中为我使用 Express 定义的每条路由重写。

标签: node.js reactjs express nginx react-router


【解决方案1】:

根据 Richard Smith,在 Nginx 中向上游传递之前重写 URL 解决了我的问题:

location / {
    rewrite ^/u/(.*)$ /actors/$1 last;
    proxy_pass http://localhost:5000;
}

【讨论】:

  • 有没有更好的方法来做到这一点,不需要为我用 Express 定义的每个路由添加 Nginx 重写,我希望能够在不指定端口号的情况下访问,返回有效的 JSON ,并且可以通过浏览器或类似 curl 的方式访问?
猜你喜欢
  • 2012-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-10
  • 2021-09-12
  • 1970-01-01
  • 2015-09-04
  • 1970-01-01
相关资源
最近更新 更多