【发布时间】:2020-06-25 20:44:58
【问题描述】:
我是 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)
})
【问题讨论】:
-
404 通常意味着服务器无法找到您请求的内容。因此,您的服务器已启动并正在运行,但无法获取您请求的资源。可能更多的上下文将有助于解决您的问题
-
我添加了我的服务器完整代码。