手动输入URL时,MERN路由器链接不起作用

时间:2020-06-13 00:17:54

标签: javascript node.js reactjs heroku react-router

我将我的MERN堆栈应用程序部署到了heroku,但是当我手动输入url路径时,路由器路径不起作用。 这是我的节点服务器:

import requests
from bs4 import BeautifulSoup

headerIstek = {
    "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.19041",
    "Sec-Fetch-Site" : "none",
    "Accept-Language" : "tr-TR,tr;q=0.9,en-US;q=0.8,en;q=0.7"
    }
istekLazim = {"ref":"","display_type":"popup","loc":""}
istekLogin = requests.get("https://www.example.com/join/login-popup/", headers=headerIstek, cookies={"ud_rule_vars":""}, params=istekLazim, verify=False)
soup = BeautifulSoup(istekLogin.text, "html.parser")
print(istekLogin.request.headers)
csrfToken = soup.find("input", {"name":"csrfmiddlewaretoken"})["value"]
print(csrfToken)

这是路由器的反应:

const express = require('express');
const path = require('path');
const connectDB = require('./config/db');

const app = express();

// //connect DB
connectDB();

app.use('/api/poll', require('./routes/api/poll'));

if(process.env.NODE_ENV === 'production'){
    app.use(express.static( 'client/build' ));

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

const PORT = process.env.PORT || 5000

app.listen(PORT, () => console.log(`Server started ${PORT}`));

基本上,如果我在浏览器URL中输入路径名,例如baseUrl / poll / vote,则它不起作用。仅当我输入链接时,它才会这样做。如果我通过我的应用重定向到达该路径,则它可以工作。

1 个答案:

答案 0 :(得分:1)

Router必须是HashRouter的实例,而不是BrowserRouter

import {BrowserRouter as Router} from 'react-router';

BrowserRouter需要在后端进行特殊配置和考虑,以处理网络请求到路由的请求,而事实上,这些请求应该由前端处理。

HashRouter更易于使用,因为它在URL中插入了#,有效地将所有页面请求发送到同一基本路由,而服务器无需执行任何特殊操作。