Node.js 刷新后无法获取正确的静态文件,索引页除外

Node.js 刷新后无法获取正确的静态文件,索引页除外,node.js,reactjs,express,react-router,serve,Node.js,Reactjs,Express,React Router,Serve,当我刷新索引路由(/)和登录页面(/login)上的页面时,它工作正常 但是,当我在其他路径(例如/user/123456)上刷新时,我的网站会出错 因为无论请求是什么,浏览器都会获取HTML文件。 因此,main.css和main.js中的内容都是HTML,浏览器出错 我已经阅读了create react应用程序的自述。 无论我使用package($serve-s build-p80)还是express,它都会产生奇怪的bug 以下是我的服务器代码: //server.js const ex

当我刷新索引路由(
/
)和登录页面(
/login
)上的页面时,它工作正常

但是,当我在其他路径(例如
/user/123456
)上刷新时,我的网站会出错

因为无论请求是什么,浏览器都会获取HTML文件。
因此,
main.css
main.js
中的内容都是HTML,浏览器出错

我已经阅读了create react应用程序的自述。
无论我使用package(
$serve-s build-p80
)还是express,它都会产生奇怪的bug

以下是我的服务器代码:

//server.js
const express=require('express');
const path=require('path');
使用(express.static(path.join('build'));
应用程序获取('/*',(请求,请求)=>{
res.sendFile(path.join(uu dirname,'build','index.html');
});
const PORT=process.env.PORT | 80;
应用程序侦听(端口,()=>{
log(`productionexpress服务器在本地主机上运行:${PORT}`);
});
编辑:我已经找出了问题的原因。
我创建了一个新项目,并将其与我的项目进行了比较。新项目中静态文件的路径为绝对路径,但在我的项目中为相对路径
因此,我删除了
package.json
中的
“homepage”:“

//package.json
{ ....
依赖项:{…},
....,
-“主页”:”
}

现在一切正常。如果您的路线
/user/**
是在
app.get('/*',…
之后定义的,那么我怎么会粗心…

,它可能不匹配,因为
/*
获取所有请求并返回index.html。
尝试不使用
*
或之前声明其他路由。

首先,我认为您误解了服务器部分。在您的情况下,您使用
serve
作为服务器。这是由[serve]提供的静态服务器。如果要使用自己的
server.js
,应运行
node server.js
node server

我也和你做了同样的事情,没有这个问题。以下是我所做的:

  • create react app my app
  • npm运行构建
  • sudo-serve-s build-p80
    sudo
    用于1024以下的端口)
  • 我得到了结果:

    我猜您可能会忘记构建脚本。您可以尝试以下操作:

  • 删除
    build/
    文件夹
  • 再次运行
    npm运行build


  • 建议:如果您想专注于前端,可以使用[serve]。您可以轻松专注于所需内容。

    我已经找出了问题的原因。 我创建了一个新项目,并将其与我的项目进行了比较。新项目中静态文件的路径是绝对路径,但在我的项目中是相对路径。 因此,我删除了package.json中的
    “homepage”:“


    现在一切正常。我怎么这么粗心…

    看看你的网页配置和索引会很有帮助。html@promisified感谢您的回复。我使用create react应用程序进行开发和构建。我应该拒绝吗?您是否尝试为构建脚本创建的静态文件提供服务?如果不是,我不确定您为什么需要express来提供文件假设create-react应用程序在开发中使用webpack-dev-server?是的,我在开发时使用webpack-dev-server。我使用
    $service-s build-p 80
    来“部署”我的应用程序遇到了上述问题。因此我尝试使用express to slovethanks进行响应。
    react route
    是客户端路由。你的意思是我仍然需要手动处理服务器路由吗?不,我想如果你在任何请求中获得main.html文件,可能是因为
    app.get(“/*”
    捕获您的所有请求。因此,可能
    app.use(express.static(path.join(u dirname,'build'));
    设置不好,我在您的文件树中没有看到任何“build”文件夹,这可能是原因。我发现我的问题是由package.json中的主页设置引起的。感谢您的回复。
    //package.json
    { ....
     dependencies:{....},
     ....,
    - "homepage": "."
    }