간단한 Express 서버에서 제공하는 React 응용 프로그램이 있습니다. React 앱은 server.js
파일이있는 루트 디렉토리의 dist
디렉토리에 webpack
입니다. dist 폴더에는 index.html
진입 점, main.min.js
JavaScript 번들 및 기타 모든 정적 애셋 (CSS, 이미지 등)이 포함됩니다.반응 라우터를 Express 서버와 함께 사용
예를 들어, localhost:3000/
사이트의 루트 디렉토리를 방문하면 index.html
이 제공되고 JS 번들을로드하고 다른 모든 자산을 정상적으로 찾습니다. 앱은 react-router
을 사용하여 버튼 클릭을 통해 정상적으로 이동하며 localhost:3000/feature
으로 연결되는 링크가 정상적으로 작동합니다. 내가 수동으로 localhost:3000/feature
의 주소 표시 줄에 입력에 가면
그러나, 서버는 예상대로 index.html
은 제공하지만, 또한 main.min.js
대신에 index.html
를 제공합니다. 이는 익스프레스 서버의 와일드 카드 경로가 index.html
을 반환하도록 매핑되기 때문입니다. 이것이 내가 어떤 기사에서 다룬 것을 본 것입니다. 그러나이 경우가 고려되었는지 확실하지 않습니다. 이 서버 라우팅을 정의하는 것을
app.use(express.static(path.join(__dirname)));
app.get('*', function response(req, res) {
res.sendFile(path.join(__dirname, 'dist', 'index.html'));
});
입니다 :
다음은 관련 서버 코드의 조각입니다. 수동 주소 변경을 허용하는 더 좋은 방법이 있습니까? 도움이된다면
여기 내 파일 구조입니다 : index.html
의
|-root
|-server.js
|-webpack.config.js
|-dist/
|-main.min.js
|-index.html
|-a2cea76fae187add3c974dcacf446eab.jpg
|-...etc
내용 :
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<div id="root"><!-- React app --></div>
<script src="dist/main-631cea2c7e308b1dfb26.min.js"></script>
</body>
</html>
아마 당신은 [이] (https://github.com/ReactTraining/react-router/blob/master/docs/guides/ServerRendering.md) –
@IslamIbakaev이 유일한 솔루션입니다해야합니까? 가능한 경우 서버 측 렌더링 (지금은)을 피하고 싶습니다. –
다른 솔루션을 모르는 경우에는 반응 라우터에서 실제로 "서버 측 반응"을하지 않고 설정합니다. –