У меня есть динамический параметр в маршруте. Когда я напрямую открываю URL-адрес, он выдает ошибку.
Чтобы мой сервер знал о маршруте, я использую статический маршрутизатор при рендеринге сервера.
Вот мой код рендеринга сервера:
const serverRender = (req, res) => {
const routes = [
{
path: '/',
exact: true,
component: Signin
}
{
path: '/shared/:id',
component: Shared,
fetchInitialData: path => sharedInitialData(path)
}
];
const activeRoute = routes.find(route => matchPath(req.url, route)) || {}
const promise = activeRoute.fetchInitialData ? activeRoute.fetchInitialData(req.path) : Promise.resolve()
const theme = createMuiTheme({
palette: {
primary: blue
},
typography: {
useNextVariants: true
}
});
const sheets = new ServerStyleSheets();
promise.then(data => {
const app = renderToString(
sheets.collect(
<ThemeProvider theme = {theme}>
<Provider store = {store}>
<StaticRouter location = {req.url} context = {{data}}>
<App />
</StaticRouter>
</Provider>
</ThemeProvider>
)
)
const css = sheets.toString();
res.send(renderFullPage(app, css))
})
.catch(error => console.info(error));
}
const renderFullPage = (html, css) => `
<!DOCTYPE html>
<html>
<head>
<style>
a{
text-decoration: none;
color: #000
}
${css}
</style>
</head>
<body>
<div id = "root">${html}</div>
<script src = "main.js"></script>
</body>
</html>
`
async function sharedInitialData(path) {
const id = path.split('/').pop();
return id;
}
Когда я открываю /shared/12345, я получаю сообщение об ошибке в консоли. Uncaught SyntaxError: неожиданный токен < main.js: 1
main.js - это файл моего пакета, сгенерированный webpack
Мой файл пакета заполняется HTML вместо js. я думаю в этом проблема
Вы проверили это? stackoverflow.com/questions/33460420/…





Я думаю, что проблема в пути в <script>, который вы указали в своем renderFullPage(). Я думаю, что ваш main.js недоступен. Можете ли вы попробовать добавить косую черту (/) в пути?
попробуй поменять <script src = "main.js"></script> на <script src = "/main.js"></script>
Да, в моем main.js, который является моим файлом пакета, заполняется HTML