[英]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 -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.