Почему переход по ссылке в одном окне ведет на новую страницу, но если открыть ту же ссылку в новой вкладке, отображается 404? - PullRequest
0 голосов
/ 29 мая 2020

Pretty geneti c Приложение React / Spring Boot здесь. Никакой безопасности. Нет apis. Всего 2 страницы. На одной странице показан мир привет, на другой - проверка слов. есть меню, в котором вы можете переключаться между ними. Почему-то работает, только если я нажимаю ссылку в том же окне. Если я открою ту же ссылку в новой вкладке, появится 404. Как это исправить? И о, передняя и задняя части интегрированы с плагином внешнего интерфейса eirslett maven. Файл пакета

{
  "name": "myreactapp",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "axios": "^0.19.2",
    "react": "^16.13.1",
    "react-dom": "^16.13.1",
    "react-router-dom": "^5.2.0",
    "react-scripts": "3.4.1"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  },
  "proxy": "http://localhost:8080",
  "homepage": "."
}

App. js:

import React, { Component } from 'react';
import LoginApp from './LoginApp'
import './App.css';
import './bootstrap.css';

class App extends Component {
  render() {
    return (
      <div className="App">
         <LoginApp/>
      </div>
    );
  }
}
export default App;

LoginApp (домашняя страница названа так, потому что, когда я решу проблему выше, я обеспечу безопасность):

import React, { Component } from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
import HeaderComponent from './HeaderComponent.jsx';
import TestComponent from './TestComponent.jsx';
import HelloComponent from './HelloComponent.jsx';
import { withRouter } from 'react-router';

class LoginApp extends Component {
    render() {
        const HeaderWithRouter = withRouter(HeaderComponent);

        return (
            <div className='TodoApp'>
                <Router basename='.'>
                    <div>
                        <HeaderWithRouter />
                        <Switch>
                            <Route path='/' exact component={HelloComponent} />
                            <Route path='/test' exact component={TestComponent} />
                        </Switch>
                    </div>
                </Router>
            </div>
        );
    }
}

export default LoginApp;

Меню:

import React, {Component} from 'react'
import {Link} from 'react-router-dom'

class HeaderComponent extends Component {
    render() {
        return (
            <header>
                <nav className="navbar navbar-expand-md navbar-dark bg-dark">
                    <div className="navbar-brand">Simple Login App JWT</div>

                    <ul className="navbar-nav">
                        <li><Link className="nav-link" to="./test">Test</Link></li>
                        <li><Link className="nav-link" to="./">Home</Link></li>
                    </ul>
                </nav>
            </header>
        )
    }
}

export default HeaderComponent

Привет:

import React, {Component} from 'react'

class HelloComponent extends Component {
    render() {
        return (
            <>
                <h1>Hello Page</h1>
                <div className="container">
                    HELLOOOOOOOOOOOOOOOOOOOOOOOOO
                </div>
            </>
        )
    }
}

export default HelloComponent

Тест - это то же самое, что и привет, вместо этого просто слово test. Наконец, создайте из pom:

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

            <plugin>
                <groupId>com.github.eirslett</groupId>
                <artifactId>frontend-maven-plugin</artifactId>
                <version>1.7.6</version>

                <executions>
                    <execution>
                        <id>Install node and npm</id>
                        <goals>
                            <goal>install-node-and-npm</goal>
                        </goals>
                        <phase>generate-resources</phase>
                        <configuration>
                            <nodeVersion>v10.15.2</nodeVersion>
                            <npmVersion>6.4.1</npmVersion>
                        </configuration>
                    </execution>

                    <execution>
                        <id>npm install</id>
                        <goals>
                            <goal>npm</goal>
                        </goals>
                        <phase>generate-resources</phase>
                        <configuration>
                            <arguments>install</arguments>
                        </configuration>
                    </execution>

                    <execution>
                        <id>npm build</id>
                        <goals>
                            <goal>npm</goal>
                        </goals>
                        <phase>generate-resources</phase>
                        <configuration>
                            <arguments>run build</arguments>
                        </configuration>
                    </execution>
                </executions>
                <configuration>
                    <nodeVersion>v10.15.2</nodeVersion>
                    <workingDirectory>src/myreactapp</workingDirectory>
                </configuration>

            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <executions>
                    <execution>
                        <id>Copy my react app into my Spring Boot target static folder</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>target/classes/static</outputDirectory>
                            <resources>
                                <resource>
                                    <directory>src/myreactapp/build</directory>
                                    <filtering>true</filtering>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

Spring boot здесь, потому что позже я создам api. Хорошо, представьте, что слова hello и test возвращаются из api. Но это ничего не изменило, новая вкладка все еще показывает 404. У меня подозрение, что ошибка находится на домашней странице в package. json и в базовом имени маршрутизатора. Но не могу решить. Спасибо за любую помощь. Ps Другой проект такого же характера только без плагина фронтенда (фронтенд на 3000 порт) позволяет открывать новые вкладки. Почему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...