代码之家  ›  专栏  ›  技术社区  ›  Alex Mckay

将React/Express应用程序部署到Heroku后无法启动护照.js流(改为页面重新加载)

  •  1
  • Alex Mckay  · 技术社区  · 6 年前

    我正在构建一个node+express服务器,在前端使用create react app。 我使用passportjs来处理身份验证路由,所有的东西都在本地主机上工作(后端在端口5000上,前端在端口3000上,有一个代理)。 当我部署到Heroku时,服务器似乎无法识别我的身份验证路由,因此Heroku将静态服务索引.html. 如果我用Postman all测试我的api似乎可以工作(我可以看到googleoauth的html页面),但是在react应用程序中使用锚定标记或在url中手动写入端点,我只能看到相同的页面重新加载。

    我的服务器索引.js:

    const express = require('express')
    const passport = require('passport')
    const mongoose = require('mongoose')
    const path = require('path')
    
    // KEYS
    const keys = require('./config/keys')
    
    // MONGOOSE MODELS
    require('./models/User')
    
    mongoose.connect(keys.mongoURI)
    
    // PASSPORT SETUP
    require('./config/passport')
    
    // CREATE THE SERVER
    const app = express()
    
    // EXTERNAL MIDDLEWARES
    require('./middlewares/external')(app)
    
    // ROUTE HANDLERS
    require('./routes/authRoutes')(app)
    
    // PRODUCTION SETUP
    if (process.env.NODE_ENV === 'production') {
      // express serve up production assets ( main.js, main.css )
      app.use(express.static('client/build'))
      app.get('*', (req, res) => {
        res.sendFile(path.resolve(__dirname, 'client', 'build', 'index.html'))
      })
    }
    
    // START THE SERVER
    const PORT = process.env.PORT || 5000
    app.listen(PORT)
    

    赫罗库: 我的react应用程序-app.herokauapp.com/->单击“Google Login”->页面重新加载,什么都不会发生。用户未登录。

    伙计们,帮帮我。 谢谢

    1 回复  |  直到 7 年前
        1
  •  2
  •   voidstar    6 年前

    这是默认情况下安装服务工作人员使应用程序成为 Progressive Web App

    要确定这是否对您有问题,请在匿名模式下测试heroku生产模式应用程序。对/auth/google的请求现在应该到达服务器,并在开发过程中表现出它的行为。

    import registerServiceWorker from "./registerServiceWorker";
    

    从您的/client/src/索引.js文件。

    1. 清除用户浏览器上的浏览器缓存
    2. 以编程方式卸载服务器工作线程

      import { unregister } from './registerServiceWorker';
      ....
      unregister();
      
        2
  •  0
  •   xiaoju    6 年前

    我也有同样的问题和同样的症状。

    server/config/prod.js 我读了一行字 cookieKey: process.env.COOKIE_KEY 但在Heroku配置变量中,变量被命名为 cookieKey COOKIE_KEY 在Heroku内部解决了这个问题。

        3
  •  0
  •   Cat Perry    6 年前

    如果你学过斯蒂芬·格里德的教程,我想知道一件事:你的护照.js配置或服务中的文件?我看你已经写信了索引.js: require('./config/passport') 而我在索引.js是 require('./services/passport')

    推荐文章