javascript - 304 并且在 Heroku 上部署的应用程序上没有 json 响应
问题描述
我正在研究 React + Express + mongo 项目。
一切都在本地运行,但是当我在 heroku.com 上部署项目时,GET 请求出现了问题。
它返回 304,而不是正文 JSON,我收到此错误:
要运行此应用程序,您需要启用 JavaScript。
我收到的不是 json 响应,而是包含有关 JS 的这些信息的 HTML 响应。在正文中,我应该得到我在页面上显示的普通数据 JSON。我会再写一次,一切都在本地工作(我得到 200 和 json 响应),我不知道这个 heroku 发生了什么。
我以为问题是304代码,所以我使用了禁用缓存(no-cache)的中间件,结果是200,但仍然没有body。
请求 Chrome 网络
GENERAL:
Request URL: MYURL.com/...
Request Method: GET
Status Code: 200 OK
Remote Address: 34.255.19.16:443
Referrer Policy: no-referrer-when-downgrade
RESPONSE HEADERS::
Accept-Ranges: bytes
Access-Control-Allow-Origin: *
Cache-Control: no-store, no-cache, must-revalidate, proxy-revalidate
Connection: keep-alive
Content-Length: 2366
Content-Type: text/html; charset=UTF-8
Date: Fri, 01 Nov 2019 13:54:09 GMT
Etag: W/"93e-16e271de930"
Expires: 0
Last-Modified: Fri, 01 Nov 2019 13:18:22 GMT
Pragma: no-cache
Server: Cowboy
Surrogate-Control: no-store
Via: 1.1 vegur
X-Powered-By: Express
REQUEST HEADERS:
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: pl-PL,pl;q=0.9,en-US;q=0.8,en;q=0.7
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjVkYTZkNjZhYTExYWI5MTM3MDU1MTY2OCIsIm5hbWUiOiJGaWxpcCIsImlhdCI6MTU3MjYxNjQ0MiwiZXhwIjoxNTcyNjIwMDQyfQ.c4uPda0njISa3VWNX0kK5cPRVW2X6A3wBNnt5hc5N-k
Connection: keep-alive
Content-Type: application/json
Cookie: AUTHORIZATION_JWT=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjVkYTZkNjZhYTExYWI5MTM3MDU1MTY2OCIsIm5hbWUiOiJGaWxpcCIsImlhdCI6MTU3MjYxNjQ0MiwiZXhwIjoxNTcyNjIwMDQyfQ.c4uPda0njISa3VWNX0kK5cPRVW2X6A3wBNnt5hc5N-k
Host: dashboard-pwa.herokuapp.com
Referer: https://dashboard-pwa.herokuapp.com/tickets/show/5dbb2310f67d543c84053a79
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36
我想用 JSON 正文响应获得 200。
解决方案
亚当特罗普谢谢!这对我帮助很大。事实证明,我在错误的位置重定向到客户端 index.html,它应该放在路由声明之后,而不是之前(就像我以前一样)。
文件 server.js:
app.use('/api/user', require('./routes/user'));
// For any request that doesn't
// match one above, send back React's index.html file.
app.get('*', (req, res) => {
res.sendFile(path.join(__dirname+'/client/build/index.html'));
});
再次感谢。
推荐阅读
- android - 如何在 mac high sierra 上修复这个 android studio 错误?
- laravel - 安装问题
- python - “Animal”的“foo”没有重载变体匹配参数类型“str”
- sql - 将 SQL 登录迁移到隔离环境
- html - Google 协作平台内部链接
- python - 我有一个长度不同的元组列表,所以我需要遍历列表
- perl - 无法在 Perl 5.32.0 MacOS Sierra 上安装 Test::File
- visual-studio-code - VSCode 无法识别所有 .clang-format 选项
- python - Pandas_ta - NoneType 对象没有属性副本
- javascript - 测验中的按钮侦听器 - 旧侦听器产生错误的输出