繁体   English   中英

无法使用 Next.js API 路由连接 Postgresql

[英]Cannot connect Postgresql with Next.js API Route

我是 Next.js 的初学者。 我想创建连接 Postgresql 数据库的 API 路由,如下所示:

// /server.js
const { Pool } = require('pg');

const pool = new Pool({
  user: process.env.DB_USER,
  host: process.env.DB_HOST,
  database: process.env.DB_DATABASE,
  password: process.env.DB_PASSWORD,
  port: process.env.DB_PORT
});

module.exports = pool;
// /src/pages/api/users.ts
import type { NextApiRequest, NextApiResponse } from "next";
import pool from "server";

export default async function handler(req: NextApiRequest, res: NextApiResponse) {
  try {
    const data =  await pool.query('SELECT * FROM user');
    res.status(200).json(data);
  } catch (err) {
    res.status(500).json({ error: 'failed to load data' })
  }
};

运行next dev后,我运行curl "http://localhost:3000/api/users" 我得到以下回复:

$ curl "http://localhost:3000/api/users"
{"error":"failed to load data"}%    

为什么我无法正确从数据库中获取数据?


笔记

  • 我的数据库配置是正确的。 我可以从我的控制台连接数据库。
  • curl命令的详细信息:
$ curl -v "http://localhost:3000/api/users"
*   Trying 127.0.0.1:3000...
* Connected to localhost (127.0.0.1) port 3000 (#0)
> GET /api/decks HTTP/1.1
> Host: localhost:3000
> User-Agent: curl/7.79.1
> Accept: */*
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 500 Internal Server Error
< Content-Type: application/json; charset=utf-8
< ETag: "1f-fks/WOXqDfcm7GRptyiB/Swu0Aw"
< Content-Length: 31
< Vary: Accept-Encoding
< Date: Thu, 23 Jun 2022 10:06:21 GMT
< Connection: keep-alive
< Keep-Alive: timeout=5
< 
* Connection #0 to host localhost left intact
{"error":"failed to load data"}%     
  • 包装信息:
"next": "^12.1.6",
"pg": "^8.7.3",
"react": "^18.1.0",
"react-dom": "^18.1.0"
"@types/node": "^17.0.41",
"@types/react": "^18.0.12",
"@types/react-dom": "^18.0.5",
"sass": "^1.52.3",
"typescript": "^4.7.3"

我自己解决了这个问题。

重要的一点是我使用Heroku Postgres

文档中所述,我们应该设置 ssl configure 如下:

const pool = new Pool({
  user: process.env.DB_USER,
  host: process.env.DB_HOST,
  database: process.env.DB_DATABASE,
  password: process.env.DB_PASSWORD,
  port: process.env.DB_PORT,
  ssl: {
    rejectUnauthorized: false //HERE!
  }
});

这解决了我的错误,我可以正确得到响应。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM