我在 Heroku 上托管了一个 node.js 后端和 Postgres 数据库。 Heroku 开始需要 ssl 后,对数据库的任何请求都停止工作。我遵循了记录在案的修复 here,但我仍然遇到错误。请求只是挂起并最终作为 CORS 错误而出错。
“从源 [...] 访问 [...] 处的 XMLHttpRequest 已被 CORS 策略阻止:请求的资源上不存在‘Access-Control-Allow-Origin’标头。”
数据库请求在浏览器和 Insomnia 中都可以在本地运行。我也尝试创建新的 Heroku 项目,但在发出数据库请求时仍然遇到相同的错误。
这是我的 db.js:
const { Client } = require("pg");
const client = new Client({
connectionString: process.env.DATABASE_URL,
ssl: {
rejectUnauthorized: false
}
});
client.connect();
module.exports = client;
app.js:
const express = require("express");
const cors = require("cors");
const app = express();
app.use(cors());
app.use(express.json());
// add logging system
const morgan = require("morgan");
app.use(morgan("tiny"));
const villagersRoutes = require("./routes/villagers");
const wakeRoutes = require("./routes/wake");
app.use("/villagers", villagersRoutes);
app.use("/", wakeRoutes);
/** 404 Not Found handler. */
app.use(function (req, res, next) {
const err = new Error("Not Found");
err.status = 404;
next(err);
});
/** Generic error handler. */
app.use(function (err, req, res, next) {
if (err.stack) console.error(err.stack);
res.status(err.status || 500).json({
message: err.message,
});
});
module.exports = app;
server.js:
const app = require("./app");
app.listen(process.env.PORT || 5000, function () {
console.log("Server is listening on port 5000");
});