@n1ksON
мидл

Почему получаю ошибку: GET localhost:8080/1/bundle.js net::ERR_ABORTED 404 (Not Found)?

Если указать несуществующий пусть с одним слешем, к примеру: localhost:8080/1, то всё корректно и показывается страница, которая указана при ошибке 404 через <Route path="*" render={() => <Error404 />} />
А если указать путь с двумя и более слешами, к примеру: localhost:8080/1/1, то ничего не отображается и в консоли ошибка:
GET http://localhost:8080/1/bundle.js net::ERR_ABORTED 404 (Not Found)


Также если просто перейти на какую-то из страниц с одним слешем, к примеру: localhost:8080/user, то всё хорошо. Если использовать подпункты на странице (когда часть контента остаётся неизменной, а часть меняется в зависимости от указанного пути) и кликнуть по ссылке с двумя и более слешами, к примеру: localhost:8080/user/progress, то контент отобразится и всё корректно. А если перезагрузить страницу, то снова возникает ошибка и отображается пустая страница:
GET http://localhost:8080/user/bundle.js net::ERR_ABORTED 404 (Not Found)


webpack.config.js:
const webpack = require('webpack');
const path = require('path');

const config = {
  entry: [
    'react-hot-loader/patch',
    './src/index.js'
  ],
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'bundle.js',
    publicPath: '/'
  },
  module: {
    rules: [
      {
        test: /\.(js|jsx)$/,
        use: 'babel-loader',
        exclude: /node_modules/
      },
      {
        test: /\.css$/,
        use: [
          'style-loader',
          'css-loader'
        ]
      },
      {
        test: /\.svg$/,
        use: 'file-loader'
      },
      {
        test: /\.png$/,
        use: [
          {
            loader: 'url-loader',
            options: {
              mimetype: 'image/png'
            }
          }
        ]
      }
    ]
  },
  resolve: {
    extensions: [
      '.js',
      '.jsx'
    ],
    alias: {
      'react-dom': '@hot-loader/react-dom'
    }
  },
  devServer: {
    historyApiFallback: true,
    contentBase: './dist'
  }
};

module.exports = config;


index.js:
import React from "react";
import { render } from "react-dom";
import { BrowserRouter } from 'react-router-dom';
import App from "./components/App";
import "./index.css";

render(
	<React.StrictMode>
		<BrowserRouter>
		      <App />
		</BrowserRouter>
	</React.StrictMode>,
	document.getElementById('app')
);

Использую react-router-dom. Подскажите, что я сделал не так и почему возникают ошибки? При необходимости, могу загрузить App.js и User.js, но там ничего особенного
  • Вопрос задан
  • 5323 просмотра
Решения вопроса 1
@n1ksON Автор вопроса
мидл
webpack.config.js
const webpack = require('webpack');
const path = require('path');

const config = {
  entry: [
    'react-hot-loader/patch',
    path.resolve(__dirname, 'src', 'index.js')
  ],
  output: {
    path: path.resolve(__dirname, './dist'),
    filename: 'bundle.js',
    publicPath: '/'
  },
  module: {
    rules: [
      {
        test: /\.(js|jsx)$/,
        use: 'babel-loader',
        exclude: /node_modules/
      },
      {
        test: /\.css$/,
        use: [
          'style-loader',
          'css-loader'
        ]
      },
      {
        test: /\.svg$/,
        use: 'file-loader'
      },
      {
        test: /\.png$/,
        use: [
          {
            loader: 'url-loader',
            options: {
              mimetype: 'image/png'
            }
          }
        ]
      }
    ]
  },
  resolve: {
    extensions: [
      '.js',
      '.jsx'
    ],
    alias: {
      'react-dom': '@hot-loader/react-dom'
    }
  },
  devServer: {
    historyApiFallback: true,
    contentBase: path.resolve(__dirname, './dist'),
    open: true,
    hot: true,
    compress: true,
  }
};

module.exports = config;

index.html
<!DOCTYPE html>
<html>
    <head>
        <title>example</title>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
    </head>
    <body>
        <div id="app"></div>
        <script src='../bundle.js'></script>
    </body>
</html>
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@abberati
frontend-разработчик
Неправильно настроены пути до статики . Запрос на js идёт на адрес localhost:8080/user/bundle.js, хотя очевидно, что должен идти на localhost:8080/bundle.js
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы