node.js - Node.js 应用程序在本地主机上运行,但在 Heroku 上出现 404 错误
问题描述
我是 Heroku 和 Node.js 的新手。它在本地主机上运行良好,但在 Heroku 上出现此错误。
404 未找到
我被这个问题困了一个星期。我在互联网上搜索但找不到有效的解决方案。我还在设置下的 Heroku 中添加了 Config Vars。在我的客户端 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 在测功机上实际运行什么。
语法很简单:
dyno_name_here: cli_command_here
推荐阅读
- html - Blazor 服务器:尝试将呈现的页面转换为 html 字符串以创建 pdf
- ios - 如何在没有 Apple Developer Account 的情况下在 iPhone 上部署 Flutter 应用程序?
- angular - RxJs 每 x 秒处理一次第一个事件
- docker - Docker 构建:无法为 openjdk 获取 oauth 令牌?
- python - Python范围打印两次
- google-sheets - 谷歌表格出勤跟踪公式
- r - 有没有办法显示合并的进度
- ruby-on-rails - 如何使用 collection_select 来调整我的表单?
- javascript - TypeError:无法读取未定义的属性“incrementMaxListeners”
- php - 数据库结果按最接近的匹配排序(3 个数字标准)