golang net / http выдает ошибку 404 при попытке вызвать другой маршрут, который не / - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть веб-приложение с React в качестве внешнего интерфейса и Golang в качестве внутреннего.
Моя идея состоит в том, чтобы использовать http.handle для обслуживания пути к React Router, который затем отображает нужный компонент.

Проблема в том, что когда я пытаюсь подключиться к localhost:8080, все идет хорошо, но когда я пытаюсь подключиться к localhost:8080/example, это дает мне 404 page not found

Для обслуживания моего приложения реагирования я использую этот код :

package main

import (
    "net/http"
    "log"
)

// frontend public path 
const public = "../frontend/public/";

func main(){
    // route handling
    http.Handle("/", http.FileServer(http.Dir(public)));
    http.Handle("/example", http.FileServer(http.Dir(public)));

    log.Println("Listening on http://locahost:8080");

    log.Fatal(http.ListenAndServe(":8080", nil));
}

Мой прямой маршрутизатор:

import React from 'react';
import {BrowserRouter as Router, Switch, Route} from 'react-router-dom';
import Home from '../pages/Home/Home';
import Admin from '../pages/Example/Example';

export default class RouteHandler extends React.Component{
    render(){
        return(
            <Router>
                <Switch>
                    <Route exact path='/'>
                        <Home />
                    </Route>
                    <Route exact path='/example'>
                        <Admin />
                    </Route>
                </Switch>
            </Router>
        )
    }
}

1 Ответ

0 голосов
/ 11 апреля 2020

Я нашел решение, проблема была в том, что с http.Handle("/example", http.FileServer(http.Dir(public))); golang пытался найти путь ../frontend/public/example.

Для решения этой проблемы я использовал http.StripPrefix:

package main

import (
    "net/http"
    "log"
)

// frontend public path 
const public = "../frontend/public/";

func main(){
    // route handling
    http.Handle("/", http.FileServer(http.Dir(public)));
    http.Handle("/admin/", http.StripPrefix("/admin/", http.FileServer(http.Dir(public))));

    log.Println("Listening on http://locahost:8080");

    log.Fatal(http.ListenAndServe(":8080", nil));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...