繁体   English   中英

Node.js 应用程序可在本地主机上运行,​​但在 Heroku 上出现 404 错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM