Я пытался написать сервер узлов, который запускал бы приложение React, созданное create-react-app
.На самом деле, происходит что-то странное, и я понятия не имею, что я делаю неправильно (запустите приложение как node server/index.js
):
export default (app, dirname) => {
app.use(favicon(path.join(dirname, '..','build', 'favicon.ico')));
app.use(express.static(path.join(dirname, '..','build')));
// initialize routers
bootRotes(app);
if (process.env.NODE_ENV === AVAILABLE_ENVIROMENTS.DEVELOPMENT) {
expressBootDev(app, dirname);
} else {
app.get('/*', (req, res) => {
res.sendFile(path.join(dirname, '..', 'build', 'index.html'));
});
}
}
build
папка содержит приложение реакции на сборку, которое создало следующую командуnpm run build
Странные вещи происходят, когда после загрузки страницы индекса она пытается загрузить статический контент.Например http://localhost:5000/static/js/2.30e86b6e.chunk.js
.Браузер просто добавляет /
после каждого статического URL контента, и он превращается в http://localhost:5000/static/js/2.30e86b6e.chunk.js/
, и, конечно, этот URL не соответствует промежуточному программному обеспечению express.static.Более того, я проверил через Postman, что URL GET http://localhost:5000/static/js/2.30e86b6e.chunk.js
withot /
в конце предоставляет ожидаемый контент.
Я работаю с PRODUCTION env, это означает, что expressBootDev не оказывает никакого влияния.
У кого-нибудь есть такая же проблема?Я провел весь день и не знаю, как его исправить.
Когда я создаю простой код в корневой папке приложения с почти такой же логикой и запускаю как node server.js
, он работает какожидается:
//server.js
const express = require('express');
const favicon = require('express-favicon');
const path = require('path');
const port = process.env.PORT || 8080;
const app = express();
app.use(favicon(__dirname + '/build/favicon.ico'));
app.use(express.static(__dirname));
app.use(express.static(path.join(__dirname, 'build')));
app.get('/ping', function (req, res) {
return res.send('pong');
});
app.get('/*', function (req, res) {
res.sendFile(path.join(__dirname, 'build', 'index.html'));
});
app.listen(port);
И я не вижу принципиальной разницы