微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法获取路径Reactjs、nodejs

如何解决无法获取路径Reactjs、nodejs

我正在尝试从 Nodejs 为我的 react 应用程序提供服务,但是我收到了一个 GET 错误,这很奇怪,因为当我运行 npm start 并运行 react start 脚本时一切正常,但是一旦我使用 node.js 就可以了。 js它不起作用。此外,如果我通过输入或尝试向后导航来导航到路线,则会引发错误。例如,当您第一次导航到主页时,它会将您带到一个登录页面,如果我转到另一个页面然后回击,它会抛出一个 GET 错误,即使它事先工作过。

Node.js 服务器

const express = require('express');
const cors = require('cors');
const path = require('path');
const app = express();

require('dotenv').config()

app.use(express.static(path.join(__dirname,'build')));
app.use(express.json());
app.use(cors());



app.get('/',async (req,res) => {

    res.sendFile(path.join(__dirname,'build','index.html'));
    
    });




    app.listen(3000,() => {
        console.log(`Server listening on 3000`);
    });

React index.js

*/
import React from "react";
import ReactDOM from "react-dom";
import { createbrowserHistory } from "history";
import { Router,Route,Switch,Redirect } from "react-router-dom";
import { Auth0Provider } from "@auth0/auth0-react";

// core components
import Admin from "layouts/Admin.js";
import Authentication from 'layouts/Authentication';
import DashboardPage from "views/Dashboard/Dashboard.js";
import UserProfile from "views/UserProfile/UserProfile.js";

import "assets/css/material-dashboard-react.css?v=1.9.0";

const hist = createbrowserHistory();

ReactDOM.render(
  <Auth0Provider
  domain={`${process.env.REACT_APP_Auth0_Domain}`}
  clientId={`${process.env.REACT_APP_Auth0_ClientID}`}
  redirectUri={`http://localhost:3000/dashboard`}
  >
  <Router history={hist}>
    <Switch>
      <Route path="/login"  component={Authentication} />
      <Route path="/dashboard" component={DashboardPage} />
      <Route path="/user"  component={UserProfile} />
      <Redirect from='/' to='/login' />
    </Switch>
  </Router>,</Auth0Provider>,document.getElementById("root")
);

Routes.js

// @material-ui/icons
import Dashboard from "@material-ui/icons/Dashboard";
import Person from "@material-ui/icons/Person";

// core components/views for Admin layout
import DashboardPage from "views/Dashboard/Dashboard.js";
import UserProfile from "views/UserProfile/UserProfile.js";
import Authentication from './layouts/Authentication';

const dashboardRoutes = [
  {
    path: "/dashboard",name: "Invoice Dashboard",icon: Dashboard,component: DashboardPage,},{
    path: "/login",name: "Login",component: Authentication
  },{
    path: "/user",name: "User Profile",icon: Person,component: UserProfile,}
];

export default dashboardRoutes;

解决方法

此行为来自您在 node.js 服务器中的 express 应用。

查看您的声明

app.get('/',async (req,res) => {
  res.sendFile(path.join(__dirname,'build','index.html')); 
});

当您请求路径 index.html 时,您的应用仅返回 '/' 文件。基本上,您的反应路由器仅通过对 '/' 的初始请求建立 - 允许反应 Link(例如)元素此后正确路由。这解释了为什么输入深层链接(例如 '/example-path')并点击后退按钮会引发错误。

构建您的快速路由以处理特定 URL,并为所有其他 URL 返回 index.js 文件。这将允许 react router 处理您的前端路由,并且仍然允许 express 处理后端路由。

// An example api endpoint that returns a list of items
app.get('/api/getList',(req,res) => {
    var list = ["item1","item2","item3"];
    res.json(list);
    console.log('Sent list of items');
});

// Handles any requests that don't match the ones above
app.get('*',res) =>{
    res.sendFile(path.join(__dirname,'index.html')); 
});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?