【问题标题】:React routes working locally but not through Heroku反应路线在本地工作,但不通过 Heroku
【发布时间】:2020-03-17 17:59:06
【问题描述】:

我用 Express 和 React 构建了一个应用程序,它有 GET 和 POST 路由,可以在本地完美运行。我已经通过 Heroku 进行了部署,但没有任何效果了!我只是收到一个 404 错误。我尝试创建一个不起作用的 static.json 文件,尽管我没有使用 Create-React-App 来设置它。

这是我的 index.js:

const mongoose = require('mongoose')
const bodyParser = require('body-parser')
const app = express()

const router = require('./config/router')
const { port, dbURI } = require('./config/environment')
const errorHandler = require('./lib/errorHandler')
const logger = require('./lib/logger')

app.use(express.static(`${__dirname}/public`))

app.use(express.static(`${__dirname}/dist`))

mongoose.connect(dbURI, { useNewURLParser: true, useCreateIndex: true})

app.use(bodyParser.json())

app.use(logger)

app.use('/api', router)

app.use(errorHandler)

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

module.exports = app

路由器.js

const vacancies = require('../controllers/vacancies')

router.route('/vacancies')
  .get(vacancies.index)
  .post(vacancies.create)

router.route('/vacancies/:id')
  .get(vacancies.show)

module.exports = router

控制器:


//tested in insomnia - works
function indexRoute(req, res, next) {
  Vacancy
    .find(req.query)
    .then(vacancies => res.status(200).json(vacancies))
    .catch(next)
}

//tested in insomnia - works
function showRoute(req, res, next) {
  Vacancy
    .findById(req.params.id)
    .then(vacancy => res.status(200).json(vacancy))
    .catch(next)
}

//tested in insomnia - works
function createRoute(req, res) {
  Vacancy
    .create(req.body)
    .then(vacancy => res.status(201).json(vacancy))
    .catch(err => res.status(422).json(err))
}

module.exports = {
  index: indexRoute,
  show: showRoute,
  create: createRoute
}

最后是环境文件:

const port = process.env.PORT || 4000
const dbURI = process.env.MONGODB_URI || `mongodb://localhost/dxw-job-board-${process.env.NODE_ENV || 'dev'}`

module.exports = { port, dbURI }

这是针对一项工作的代码测试,我真的很想担心它不能正常工作 - 任何帮助都将不胜感激!

【问题讨论】:

  • 感谢您的帮助!!事实证明,这与我的代码关系不大,更多的是因为我没有在 heroku 中创建一个 mongo db 作为插件......

标签: node.js reactjs express heroku routing


【解决方案1】:

当我第一次尝试在 Heroku 上部署一个应用程序时,我遇到了这个问题并把我的头发拉了出来(实际上是我第一次体验任何类型的部署)。在生产服务器 (Heroku) 上,您应该从 build 目录而不是 /public 目录提供静态文件。

类似这样的:

if (process.env.NODE_ENV === "production") {
  // react build directory /public 
} else {
  // Local production env react /public dir
}

这应该告诉 Node 它在 Heroku(或您使用的任何平台)上,并且需要使用生产版本而不是开发版本。

希望能为您解决问题。

【讨论】:

    猜你喜欢
    • 2021-12-28
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 2014-01-02
    • 2021-01-08
    相关资源
    最近更新 更多