我用Express和React构建了一个应用程序,该应用程序具有GET和POST路由,这些路由在本地可以完美运行。我已经通过Heroku进行了部署,但现在一切正常!我刚收到404错误。尽管我并未使用Create-React-App进行设置,但我试图创建一个无法正常工作的static.json文件。
这是我的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
router.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 }
这是一项针对我真的想为它无法正常工作而感到焦虑的工作的代码测试-任何帮助将不胜感激!
答案 0 :(得分:0)
当我第一次尝试在Heroku上部署应用程序时,我碰到了这个问题,然后拔了头发(这是我对任何类型的部署的第一次体验)。在生产服务器(Heroku)上,您应该从build
目录而不是/public
目录提供静态文件。
类似这样的东西:
if (process.env.NODE_ENV === "production") {
// react build directory /public
} else {
// Local production env react /public dir
}
这应该告诉Node它在Heroku(或您使用的任何平台)上,并且需要使用生产版本而不是开发版本。
希望能为您解决问题。