РЕДАКТИРОВАТЬ: Я открываю about:debugging#workers
(как я использую firefox
) и обнаружил нарушитель ServiceWorker, обслуживающий ту же страницу, даже когда сервер ВНИЗ.По-видимому, он оставался открытым с предыдущего запуска.Поскольку я не знаком с работниками сферы услуг, это меня полностью смутило.Теперь, когда я зарегистрировал это, я получаю ожидаемое поведение.Я оставляю этот пост без ответа, так как я не уверен, как настроить моего сервисного работника для предотвращения подобных проблем в будущем.
Я хочу, чтобы мой сервер Express всегда обслуживал приложение React, если маршрут точно не равен /foo
.
Теперь этот пример работает :
const express = require("express")
const path = require("path")
const app = express()
const staticPath = path.join(__dirname, '/static')
const indexPath = path.join(staticPath, '/index.html')
app.get("/foo", (req, res) => res.send("foo"))
app.use("/", express.static(staticPath))
app.get("*", (req, res) => res.sendFile(indexPath))
app.listen(5000, () => console.log("Listening on port 5000"))
и структура папок выглядит следующим образом:
├── index.js
└── static
└── index.html
, но когдаНа самом деле я делаю то же самое для моего реального сервера, структура папок которого выглядит так:
.
├── config // create-react-app ejected config
├── react // subfolder containing react code
│ ├── build // output
│ │ ├── asset-manifest.json
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── manifest.json
│ │ ├── service-worker.js
│ │ └── static
│ │ ├── css
│ │ ├── js
│ │ └── media
│ └── src
│ ├── App.tsx
│ └── index.tsx
└── server // subfolder containing server code
├── build
│ └── dist
│ └── expressIndex.js // server code compiled to js
└── src
└── expressIndex.ts // original server code in typescript
и этот экспресс-код:
import * as express from "express"
import * as path from "path"
const app = express()
const staticPath = path.join(__dirname, "../../../react/build")
const indexPath = path.join(staticPath, "/index.html")
app.get("/foo", (req, res) => res.send("foo"))
app.use("/", express.static(staticPath))
app.get("*", (req, res) => res.sendFile(indexPath))
const port = process.env.PORT || 5000
app.listen(port, () => console.log(`Express server listening on port ${port}`))
, тогда он просто отказываетсяподтвердите /foo
маршрут .Он всегда отправляет обратно index.html.
Я подумал, что это может быть связано с локальным кэшированным ресурсом из-за registerServiceWorker.js
, я отключил его из index.tsx
реакции и все того же поведения.
Что я делаю не так?