【问题标题】:Node.js app works on Local host but giving 404 Error on HerokuNode.js 应用程序在本地主机上运行,​​但在 Heroku 上出现 404 错误
【发布时间】: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 通常意味着服务器无法找到您请求的内容。因此,您的服务器已启动并正在运行,但无法获取您请求的资源。可能更多的上下文将有助于解决您的问题
  • 我添加了我的服务器完整代码。

标签: node.js heroku


【解决方案1】:

在 Heroku 中,在应用程序仪表板右上角的“更多”下,您可以“查看日志”以查看它是否正常启动以及是否遇到任何错误。

确保设置了一个 Procfile,它告诉 Heroku 在测功机上实际运行什么。

语法很简单:

dyno_name_here: cli_command_here

【讨论】:

猜你喜欢
  • 2020-08-01
  • 1970-01-01
  • 2016-12-30
  • 1970-01-01
  • 2014-10-24
  • 2013-02-22
  • 1970-01-01
  • 2021-07-15
  • 2012-01-28
相关资源
最近更新 更多