我不确定我做了什么,但我弄坏了一些东西。尝试将 API 部署到 Heroku。本地一切都很好,但后来我想我做错了什么,现在一切都坏了。当我只去 localhost:5000
并显示该页面(它只是说“hello world”)时,它可以工作,但是当我尝试使用 API 参数访问任何东西时,例如:localhost:5000/data/2018-10/gen6ou
它只是坐着。控制台中没有显示错误。在终端中,我运行命令:node index.js
它显示:str.charAt is not a function
但没有中断连接或任何东西。
index.js
const express = require('express');
const app = express();
const pool = require("./db"); //stores super secret db info
const cors = require("cors");
const PORT = process.env.PORT || 5500;
// middleware
app.use(cors());
app.use(express.json()); // => req.body
app.use(express.static('public')); //index.html, just says 'hello world'
// get the data
app.get("/data/:date/:tier", async (req, res) => {
try {
const { date, tier } = req.params;
const allData = await pool.query(
"SELECT * FROM smogon_usage_stats WHERE date=$1 AND tier=$2",
[date, tier]
);
const results = allData.rows;
const output = { "data": Object.fromEntries(
results.map(
item => [item.pokemon, item]
))
};
res.json(output);
} catch (error) {
console.log(error.message);
};
});
app.listen(PORT, () => {
console.log(`Server running on port ${PORT}.`);
});
package.json
{
"name": "usage_server",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"cors": "^2.8.5",
"dotenv": "^8.2.0",
"express": "^4.17.1",
"pg": "^8.5.1"
},
"engines": {
"node": "14.16.0",
"npm": "6.14.11"
},
"proxy": "http://localhost:5000"
}
db.js
const { Pool } = require('pg');
require("dotenv").config();
const devConfig = `postgresql://${process.env.PG_USER}:
${process.env.PG_PASSWORD}@${process.env.PG_HOST}:
${process.env.PG_PORT}/${process.env.PG_DATABASE}`;
const proConfig = {
connectionString: process.env.DATABASE_URL
};
const conn = new Pool({
connectionString: process.env.NODE_ENV === "production" ? devConfig : proConfig
});
module.exports = conn;
答案 0 :(得分:0)
在生产中,您的数据库配置对象无效 - connectionString
包含另一个对象(proConfig
)。
您似乎正在寻找其中之一
const devConfig = {
connectionString: `postgresql://${process.env.PG_USER}:${process.env.PG_PASSWORD}@${process.env.PG_HOST}:${process.env.PG_PORT}/${process.env.PG_DATABASE}`
};
const proConfig = {
connectionString: process.env.DATABASE_URL
};
const conn = new Pool(process.env.NODE_ENV === "production" ? devConfig : proConfig);
或
const connectionString = process.env.NODE_ENV === "production"
? process.env.DATABASE_URL
: `postgresql://${process.env.PG_USER}:${process.env.PG_PASSWORD}@${process.env.PG_HOST}:${process.env.PG_PORT}/${process.env.PG_DATABASE}`;
const conn = new Pool({ connectionString });