Node.js 使用express服务静态文件时出现问题

Node.js 使用express服务静态文件时出现问题,node.js,express,heroku,create-react-app,Node.js,Express,Heroku,Create React App,我读过几篇关于如何使用express创建react应用程序提供静态文件的文章。我现在什么都试过了。有人能帮我吗 这就是我的结构 当我将此部署到Heroku时,我得到以下错误:main.ac4887ed.js:1未捕获的语法错误:意外的令牌我有一个已部署的带有create-react-app的应用程序。以下是我的设置与您的设置之间的一些差异,您可能会进行测试: if ( process.env.MODE !== 'development') app.use( expres

我读过几篇关于如何使用express创建react应用程序提供静态文件的文章。我现在什么都试过了。有人能帮我吗

这就是我的结构


当我将此部署到Heroku时,我得到以下错误:
main.ac4887ed.js:1未捕获的语法错误:意外的令牌我有一个已部署的带有create-react-app的应用程序。以下是我的设置与您的设置之间的一些差异,您可能会进行测试:

    if ( process.env.MODE !== 'development')
        app.use( express.static( `${__dirname}/../build` ) );

    if ( process.env.MODE !== 'development') {
        app.get('*', (req, res)=>{
            res.sendFile(path.join(__dirname, '../build/index.html')); 
        });
    }
  • 我对静态路径和get端点都使用绝对路径
  • 这些块是分开的,我将静态中间件放在所有其他中间件之前,get*端点放在服务器文件的最底部。只有app.listen()低于该值
  • 您还会注意到,我使用的是path.join而不是path.resolve,并将一个单独的参数附加到_dirname
确保您执行了
npm运行build
,并在完成后重新启动服务器。

我发现:

在我的
server.js文件中,我更改了

if (process.env.NODE_ENV === "production") {
  // Set static folder
  app.use(express.static("../build"));

  app.get("*", (req, res) => {
    res.sendFile(path.resolve(__dirname, "../build", "index.html"));
});


谢谢你的帮助

index.html文件不包含任何内容,我应该在其中添加什么?我第一次这么做的时候:/这可能意味着index.html与您发布的不同(它看起来像是构建index.html的模板)。如果没有,就无法加载React应用程序(main.ac4887ed.js)。改为从/build folder发布index.html。我用/build folder@estusI-see中的index.html在帖子中添加了新行。错误是由于提供了
/index.html
而不是
/static/js/main.ac4887ed.js
。如果/build中缺少/static/js/main.ac4887ed.js,就会发生这种情况。我不知道为什么CreateReact应用程序会出现这种情况。确保main.*.js文件存在,并确保*与标记中的相同。如果需要,请重新生成项目。意外令牌仍然存在相同问题:/
const express = require("express");
const app = express();
var path = require("path");
var jsonServer = require("json-server");
app.use(express.static("files"));
app.post("/mm", (req, res) => {
    res.sendFile(express.static(path.join(__dirname, "/files/hey.`enter code here`html")));
});
app.use("/api", jsonServer.router("./db.json"));
app.listen(9924, () => {
    console.log("hello");
});
"dependencies": {
"axios": "^0.17.1",
"bcryptjs": "^2.4.3",
"body-parser": "^1.18.2",
"connect-mongo": "^2.0.1",
"express": "^4.16.2",
"express-session": "^1.15.6",
"immutable": "^3.8.2",
"jsonwebtoken": "^8.3.0",
"lodash": "^4.17.4",
"moment": "^2.19.2",
"mongoose": "^5.0.2",
"morgan": "^1.9.0",
"passport": "^0.4.0",
"passport-local": "^1.0.0",
"passport.socketio": "^3.7.0",
"react": "^16.1.1",
"react-bootstrap": "^0.32.4",
"react-countdown-now": "^1.3.0",
"react-dom": "^16.1.1",
"react-redux": "^5.0.5",
"react-router-dom": "^4.3.1",
"react-router-redux": "^4.0.7",
"react-scripts": "1.0.17",
"redux": "^4.0.0",
"redux-promise": "^0.5.3",
"redux-thunk": "^2.1.0",
"ws": "^6.1.0"
},
    if ( process.env.MODE !== 'development')
        app.use( express.static( `${__dirname}/../build` ) );

    if ( process.env.MODE !== 'development') {
        app.get('*', (req, res)=>{
            res.sendFile(path.join(__dirname, '../build/index.html')); 
        });
    }
if (process.env.NODE_ENV === "production") {
  // Set static folder
  app.use(express.static("../build"));

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

  app.get("*", (req, res) => {
    res.sendFile(path.resolve(__dirname, "build", "index.html"));
  }); 
}
const express = require("express");
const app = express();
var path = require("path");
var jsonServer = require("json-server");
app.use(express.static("files"));
app.post("/mm", (req, res) => {
    res.sendFile(express.static(path.join(__dirname, "/files/hey.`enter code here`html")));
});
app.use("/api", jsonServer.router("./db.json"));
app.listen(9924, () => {
    console.log("hello");
});