Я пытаюсь понять маршруты и поведение кэша express.
Я управляю SPA SPA, который создаю, а затем обслуживаю за express.
React имеет собственную внутреннюю маршрутизацию, и это прекрасно работает. Но кроме того, я мог бы сначала захотеть поймать некоторые маршруты в express и делать с ними другие вещи.
Однако есть некоторые особенности кэширования, которые я не могу контролировать.
В основном, когда я go на URL-адрес «/ ping» в браузере, при первой загрузке я вижу «pong», вторая загрузка показывает «вы сделали это, чтобы реагировать на приложение», жесткий refre sh возвращается к pong, мягкая ссылка sh снова реагирует на приложение. Даже когда приложение реагирует, console.log('everything else')
никогда не вызывается. (т.е. express не обрабатывает запрос динамически)
Я попытался использовать пакет nocache, а также другие примеры здесь:
Как отключить кэширование веб-страниц в ExpressJS + NodeJS?
app.set('etag', false)
app.disable('view cache');
et c
- Поведение не меняется.
- На самом деле я не хочу полностью калечить кеш браузера, просто сначала соблюдаем правила маршрута stati c, а все, что не совпадает, отправляется для реакции SPA.
Ясно У меня есть фундаментальное недопонимание маршрутизации express, но я не уверен, куда отсюда go. Любые отзывы приветствуются.
Ниже моя express конфигурация.
#!/usr/bin/env node
// @requires
const dotenv = require('dotenv')
const express = require('express')
const path = require('path')
const nocache = require('nocache');
// @config
dotenv.config()
const app = express()
const env = process.env.ENV
app.use(nocache());
app.use(express.static(path.join(__dirname, '../build'), {
etag: false
}))
// @configure express static routes
app.get('/ping', function (req, res) {
console.log('ping')
return res.send('pong v1')
})
// @condigure main app handler
app.get('*', function (req, res) {
console.log('everything else')
res.sendFile(path.join(__dirname, '../build', 'index.html'))
})
// @create listening port
app.listen(process.env.PORT || 8080)