Heroku应用程序仅适用于Chrome桌面// React.Js应用程序

时间:2018-05-24 09:32:11

标签: javascript html reactjs heroku redux

最近完成了一个React项目,该项目提取新闻文章并显示它们。最近部署到Heroku并发现只有Chrome on Desktop似乎可以运行它。

当我查看Javascript控制台时,Safari和Firefox都会给我同样的错误。This link

链接到heroku应用 - Javascript error

服务器设置

    const express = require("express");
const mongoose = require("mongoose");
const bodyParser = require("body-parser");
const passport = require("passport");
const path = require("path");

const users = require("./routes/api/users");
const profile = require("./routes/api/profile");

const app = express();
// Body Parser Middleware
app.use(express.urlencoded({ extended: false }));
app.use(express.json());

// DB config
const db = require("./config/keys").mongoURI; //mongodb database url connection

// connect to mongodb
mongoose
  .connect(db)
  .then(() => console.log("MongoDB Connected"))
  .catch(err => console.log(err));

//passport Middleware

app.use(passport.initialize());

//passport config
require("./config/passport")(passport);

//use routes

app.use("/api/users", users);
app.use("/api/profile", profile);

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

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

const port = process.env.PORT || 5000;

app.listen(port, () => console.log(`Server running on port ${port}`));

我认为我的代码没有任何问题,因为它在本地运行完美,而且chrome处理得很好。任何明显的原因,为什么Safari,Firefox和移动设备上的任何浏览器都无法呈现我的Web应用程序的任何部分?

2 个答案:

答案 0 :(得分:3)

只是有同样的问题。在部署之前,请确保您已使用Redux开发工具。

在store.js文件中包括以下内容,以免在生产中使用“ redux devtools”。

if(process.env.NODE_ENV === 'production') {
    store = createStore(rootReducer, initialState, compose(
        applyMiddleware(...middleware)
    ));
} else {
    store = createStore(rootReducer, initialState, compose(
        applyMiddleware(...middleware),
        window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
    ));
}

想法是在开发过程中仅包括REDUX_DEVTOOLS。在生产环境中不应使用此功能,因为只有扩展为redux devtool的浏览器才能查看该页面。

答案 1 :(得分:0)

此问题是由于redux-devtools-extension引起的。

您最有可能在未安装redux-devtools-extension的所有浏览器控制台中出现以下错误:

  

TypeError:未定义不是对象(正在评估“ b.apply”)

这是因为您最有可能实现的window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()返回的是undefined,这意味着.apply()在undefined上被调用,从而导致错误。

您可以将其完全从产品中删除,例如他真正的好答案中提到的@Vindao,或者使用以下代码,如果当前浏览器不支持,则根本不会使用redux-devtools-extension:

const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose; 
const store = createStore(rootReducer, initialState, composeEnhancers(
    applyMiddleware(...middleware)
  ));

有关如何使用适当的Redux-devtools-extensions创建商店的更多详细信息或其他可能性,请参见Advanced store setup