react-маршрутизатор работает только для корневого пути

#reactjs #react-router

Вопрос:

Я пытаюсь проложить маршрут по нескольким путям с помощью маршрутизатора react. Но он ведет только к корневому пути, а не к другим.

это код реакции:

 function Routing() {
    return (
        <Router>
            <div>
                <App/>
                <Switch>
                    <Route path = "/" exact component={App} />
                    <Route path = "/home" exact component={Home} />
                </Switch>
            </div>
        </Router>   
    )
}
 

тем не менее, это дает мне: Не могу ДОБРАТЬСЯ /домой

После исследования в Интернете я увидел, что у нескольких людей была одна и та же проблема, одним из ответов stacoverflow для ее решения было использование этого кода на сервере.

 app.get('*', function(req, res) {
  res.render('..build/index');
});
 

и:

 app.get('*', function(req, res) {
      res.render('..public/index');
    });
 

и:

 app.get('*', function(req, res) {
      res.render('index');
    });
 

но это дает мне еще одну ошибку:

 Error: No default engine was specified and no extension was provided.
    at new View (/Users/mhkhan4/Desktop/Books2Go/backend/node_modules/express/lib/view.js:61:11)
    at Function.render (/Users/mhkhan4/Desktop/Books2Go/backend/node_modules/express/lib/application.js:570:12)
    at ServerResponse.render (/Users/mhkhan4/Desktop/Books2Go/backend/node_modules/express/lib/response.js:1012:7)
    at /Users/mhkhan4/Desktop/Books2Go/backend/server.js:17:7
    at Layer.handle [as handle_request] (/Users/mhkhan4/Desktop/Books2Go/backend/node_modules/express/lib/router/layer.js:95:5)
    at next (/Users/mhkhan4/Desktop/Books2Go/backend/node_modules/express/lib/router/route.js:137:13)
    at Route.dispatch (/Users/mhkhan4/Desktop/Books2Go/backend/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/Users/mhkhan4/Desktop/Books2Go/backend/node_modules/express/lib/router/layer.js:95:5)
    at /Users/mhkhan4/Desktop/Books2Go/backend/node_modules/express/lib/router/index.js:281:22
    at param (/Users/mhkhan4/Desktop/Books2Go/backend/node_modules/express/lib/router/index.js:354:14)
 

Ответ №1:

 if(process.env.NODE_ENV=="production"){
    app.use(express.static("client/build"))
    const path=require('path')
    app.get("*",(req,res)=>{
        res.sendFile(path.resolve(__dirname,'client','build','index.html'))
    })
}
 

Вы должны указать правильное имя каталога и используемое промежуточное программное обеспечение.Когда вы отправляете статические файлы, вы должны упомянуть, что они статичны