【问题标题】:Deploying app to Heroku throws error { path=“/” path=“/favicon.ico” }. But runs on localhost将应用程序部署到 Heroku 会引发错误 { path=“/” path=“/favicon.ico” }。但在本地主机上运行
【发布时间】:2021-03-24 07:32:06
【问题描述】:

我正在尝试将我的应用部署到 Heroku。即使它在本地主机上运行,​​我也会收到 503(服务不可用)错误。我尝试了很多解决方案,但没有一个有效。我的 app.js 文件

if (process.env.NODE_ENV !== "production") {
  require("dotenv").config();
}

const express = require("express");
const mongoose = require("mongoose");
const { ApolloServer } = require("apollo-server-express");
const auth = require("./middleware/auth");
const userController = require("./controllers/userController");
const typeDefs = require("./schema");
const resolvers = require("./resolvers");

const port = process.env.PORT || 4000;
const app = express();
app.set("port", port);

app.use((req, res, next) => {
  res.setHeader("Access-Control-Allow-Origin", "*");
  res.setHeader(
    "Access-Control-Allow-Methods",
    "OPTIONS, GET, POST, PUT, PATCH, DELETE"
  );
  res.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
  next();
});

app.use(auth);
app.get("/email-confirmation/:token", userController.confirmationPost);

const server = new ApolloServer({
  typeDefs,
  resolvers,
  formatError: (err) => {
    if (!err.originalError) {
      return err;
    }
    if (err.message.startsWith("Database Error: ")) {
      err.message = "Internal server error";
    }
    const data = err.originalError.data;
    const message = err.message || "Internal server error.";
    const code = err.originalError.code || 500;
    return { message: message, status: code, data: data };
  },
  context: ({ req, res }) => ({
    req,
    res,
  }),
});

server.applyMiddleware({ app });

mongoose
  .connect(process.env.DB_URL, {
    useNewUrlParser: true,
    useUnifiedTopology: true,
    useCreateIndex: true,
  })
  .then(() => {
    console.log("conneted to database");
    app.listen(port, () => {
      console.log("listening for requests on port " + port);
    });
  });

而我的 package.json 是:

{
  "name": "server",
  "version": "1.0.0",
  "description": "",
  "main": "app.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node app.js",
    "dev": "nodemon app.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "apollo-server-express": "^2.17.0",
    "bcryptjs": "^2.4.3",
    "crypto": "^1.0.1",
    "express": "^4.17.1",
    "graphql": "^15.3.0",
    "jsonwebtoken": "^8.3.0",
    "mongoose": "^5.10.2",
    "nodemailer": "^6.4.16",
    "nodemailer-sendgrid-transport": "^0.2.0",
    "validator": "^10.8.0"
  },
  "devDependencies": {
    "dotenv": "^8.2.0",
    "eslint": "^7.7.0",
    "nodemon": "^2.0.6"
  }
}

heroku logs --tail 命令给出以下输出:

我已经尝试了所有解决方案。但他们似乎都没有解决这个问题。请帮忙。

更新:

在 Heroku 中设置 DB_URL 后,它开始工作,但我收到另一个错误。

控制台:

1. GET https://capstone-ecommerce-backend.herokuapp.com/ 404 (Not Found)
2. Refused to load the image 'https://capstone-ecommerce-backend.herokuapp.com/favicon.ico' because it violates the following Content Security Policy directive: "default-src 'none'". Note that 'img-src' was not explicitly set, so 'default-src' is used as a fallback.

【问题讨论】:

  • 你是否在 Heroku 环境变量部分设置了DB_URL

标签: javascript node.js mongodb heroku


【解决方案1】:

尝试在您的 Heroku 应用程序中设置 DB_URL。使用以下命令:

$ heroku config:set DB_URL=database_uri_here

【讨论】:

  • 是的,在我设置 DB_URL 后,它正在工作,但我收到另一个错误。 1.“GET capstone-ecommerce-backend.herokuapp.com404(未找到)”2.“拒绝加载图像'capstone-ecommerce-backend.herokuapp.com/favicon.ico',因为它违反了以下内容安全策略指令:'default-src'none'”。注意'img- src' 没有明确设置,所以 'default-src' 被用作后备。"
  • 尝试设置根 URL (/)
  • 如果您可以为此创建一个单独的问题会更好:)
猜你喜欢
  • 2020-07-14
  • 2020-08-01
  • 2020-06-25
  • 2021-09-10
  • 2016-12-30
  • 2022-07-15
  • 2018-01-10
  • 1970-01-01
  • 2021-04-10
相关资源
最近更新 更多