我正在构建一个节点 + 快速服务器,前端带有 create-react-app。我使用passportjs进行身份验证路由处理,所有东西都在本地主机上工作(后端在端口5000,前端在端口3000,带有代理)。当我部署到 Heroku 时,似乎服务器无法识别我的身份验证路由,因此 heroku 提供静态 index.html。如果我用 Postman 测试我的 API 似乎都有效(我可以看到 google oauth 的 html 页面),但是在我的 React 应用程序中使用锚标记或在 url 中手动编写端点,我只能看到重新加载相同的页面。
我的服务器 index.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)
流动:
LOCALHOST:react 应用程序启动 -> 我点击“Google 登录” -> GET 请求到“/auth/google” -> google oauth flow -> 重定向到“/”并且我的 react 应用程序重新出现,用户已登录。
HEROKU:在 my-app.herokuapp.com/ 上响应应用程序 -> 点击“Google 登录” -> 页面重新加载,没有任何react。用户未登录。
请大家帮帮我。谢谢