【发布时间】:2021-01-26 07:00:13
【问题描述】:
尝试在我的应用程序中使用 BrowserRouter,不知道哪里出错了,但我认为这可能与我的 webpack 有关。最终,当 path='/' 在第一次渲染时,我可以使用任何组件。 一旦我尝试使用不同的路径,比如 path='/contact',我会收到 404 错误。
Webpack.config.js -
const path = require('path');
module.exports = {
mode: 'development',
entry: { app: './src/App.jsx' },
output: {
filename: '[name].bundle.js',
path: path.resolve(__dirname, 'public'),
publicPath: '/',
},
module: {
rules: [{
test: /\.jsx?$/,
exclude: /node_modules/,
use: 'babel-loader',
},
],
},
optimization: {
splitChunks:{
name: 'vendor',
chunks: 'all',
},
},
devtool: 'source-map'
};
App.jsx -
import 'babel-polyfill';
import 'whatwg-fetch';
import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter as Router, Route } from 'react-router-dom';
// import Page from './Page.jsx';
import About from './About.jsx';
import Contact from './Contact.jsx';
export default class App extends React.Component {
render() {
return (
<Router>
<div>
<Route path="/" component={About} />
<Route path="/contact" component={Contact} />
</div>
</Router>
)
}
}
ReactDOM.render(<App />, document.getElementById('content'));
server.js -
let express = require('express');
let app = express();
app.use(express.static('public'));
app.use(express.urlencoded({extended: true}));
app.use(express.json());
let PORT = process.env.PORT || 8080;
app.listen(PORT, function() {
console.log(`Server listening on ${PORT}`);
});
而我的文件结构如下
- Root Directory
package.json
webpack.config.js
.gitignore
.env
-> public
|-> app.bundle.js
|-> app.bundle.js.map
|-> App.js
|-> index.html
|-> vendor.bundle.js
|-> vendor.bundle.js.map
-> server
|-> server.js
-> src
|-> .babelrc
|-> About.jsx
|-> App.jsx
|-> Contact.jsx
【问题讨论】:
-
自从我使用 express 已经有一段时间了,但我没有看到为您的 index.html 提供“/contact”路由的后备路由。如果您从
react-router-dom添加Link以导航到“/contact”而不进行重定向(即转到基本路线,单击链接被带到“/contact”)这将起作用,因为它不会命中服务器,但在“/contact”页面上刷新会再次导致 404。 TLDR:您没有告诉 express 在转到“/contact”时提供 index.html 页面
标签: javascript node.js reactjs express webpack