str.CharAt 不是函数 - 尝试访问服务器路由时

时间:2021-04-19 15:23:35

标签: javascript node.js express

我不确定我做了什么,但我弄坏了一些东西。尝试将 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;

1 个答案:

答案 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 });