[英]Node.js app works on Local host but giving 404 Error on Heroku
我是 Heroku 和 Node.js 的新手。 它在本地主机上运行良好,但在 Heroku 上出现此错误。
404 未找到
我被这个问题困了一个星期。 我在互联网上搜索,但找不到有效的解决方案。 我还在设置下的 Heroku 中添加了配置变量。 在我的客户端 React 应用程序中,我调用这个“ https://work.herokuapp.com/events/daily ” API 来获取数据。 我的服务器完整代码:
const express = require('express');
const pg = require('pg');
const app = express();
require('dotenv').config();
const pool = new pg.Pool();
const queryHandler = (req, res, next) => {
pool.query(req.sqlQuery).then((r) => {
return res.json(r.rows || [])
}).catch(next)
}
app.get('/', (req, res, next) => {
res.header("Access-Control-Allow-Origin", "*");
res.send('Welcome 😎');
})
app.get('/events/hourly', (req, res, next) => {
res.header("Access-Control-Allow-Origin", "*");
req.sqlQuery = `
SELECT date, hour, events
FROM public.hourly_events
ORDER BY date, hour
LIMIT 50;
`
return next()
}, queryHandler)
app.get('/events/daily', (req, res, next) => {
res.header("Access-Control-Allow-Origin", "*");
req.sqlQuery = `
SELECT date, SUM(events) AS events
FROM public.hourly_events
GROUP BY date
ORDER BY date
LIMIT 7;
`
return next()
}, queryHandler)
app.get('/stats/hourly', (req, res, next) => {
res.header("Access-Control-Allow-Origin", "*");
req.sqlQuery = `
SELECT poi_id, date, hour, impressions, clicks, revenue
FROM public.hourly_stats
ORDER BY date, hour
LIMIT 168;
`
return next()
}, queryHandler)
app.get('/stats/daily', (req, res, next) => {
res.header("Access-Control-Allow-Origin", "*");
req.sqlQuery = `
SELECT date,
SUM(impressions) AS impressions,
SUM(clicks) AS clicks,
SUM(revenue) AS revenue
FROM public.hourly_stats
GROUP BY date
ORDER BY date
LIMIT 10;
`
return next()
}, queryHandler)
app.get('/poi', (req, res, next) => {
res.header("Access-Control-Allow-Origin", "*");
req.sqlQuery = `
SELECT *
FROM public.poi;
`
return next()
}, queryHandler)
app.get('/join/poi/stats_hourly', (req, res, next) => {
res.header("Access-Control-Allow-Origin", "*");
req.sqlQuery = `
SELECT DISTINCT *
FROM public.poi, public.hourly_stats
WHERE public.poi.poi_id = public.hourly_stats.poi_id
LIMIT 10;
`
return next()
}, queryHandler)
app.listen(process.env.PORT || 5555, (err) => {
if (err) {
console.error(err)
process.exit(1)
} else {
console.log(`Running on ${process.env.PORT || 5555}`)
}
})
// last resorts
process.on('uncaughtException', (err) => {
console.log(`Caught exception: ${err}`)
process.exit(1)
})
process.on('unhandledRejection', (reason, p) => {
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason)
process.exit(1)
})
在 Heroku 中,在应用程序仪表板右上角的“更多”下,您可以“查看日志”以查看它是否正常旋转以及是否出现任何错误。
确保设置一个 Procfile,它告诉 Heroku 在 dynos 上实际运行什么。
语法很简单:
dyno_name_here: cli_command_here
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.