使用Node.js和Node-postgres在PSQL数据库上尝试GET时发生ECONNREFUSED错误



当我使用浏览器对数据库表中的所有条目发出GET请求时,我收到以下错误:

错误:connect ECONNREFUSED 127.0.0.1:5432在TCPConnectWrap.afterConnect[完成时](节点:net:1187:16(GET/产品错误

相关文件夹结构如下所示:

server/
db/
index.js
routes/
products.js
index.js

涉及的文件有:

server/index.js

const express = require("express");
const cors = require("cors");
const app = express();
const PORT = process.env.port || 3001;
app.use(cors());
app.use(express.json());
// const usersRouter = require('./routes/users')
// app.use('/users', usersRouter)
// const authRouter = require('./routes/auth')
// app.use(['/login', '/register'], authRouter)
const productsRouter = require('./routes/products')
app.use('/products', productsRouter)
// const cartsRouter = require('./routes/carts')
// app.use('/carts', cartsRouter)
// const ordersRouter = require('./routes/orders')
// app.use('/orders', ordersRouter)
app.listen(PORT, () => {
console.log(`Listening on ${PORT}`);
});

初始化端口3001上的服务器并创建productsRouter。


server/db/index.js

const { Pool, Client } = require("pg");
const pool = new Pool({
user: "postgres",
host: "localhost",
database: "ecommerce",
password: "postgres",
port: "5432",
});
module.exports = {
query: (text, params, callback) => {
return pool.query(text, params, callback)
},
}

提供进行查询的功能。


服务器/路线/产品.js

const express = require("express");
const products = express.Router();
const db = require("../db/index");
products.get("/", async (req, res) => {
try {
const products = await db.query("SELECT * FROM products");
return res.status(201).send(products.rows);
} catch (err) {
console.log(err.stack);
console.log("Error in GET /products");
res.status(500).send("Server Error Occurred");
}
});

提供Node.js逻辑,用于使用db.query调用进行请求。


产生错误的步骤:

  1. 在本地主机的5432端口上启动/连接Postbird。

  2. 在server/index.js上运行nodeindex.js启动node.js服务器正在侦听端口3001。

  3. 将浏览器导航到localhost:3001/products以启动GET请求。

这里是自学成才的程序员。事实证明,当Codecademy告诉我安装Windows Subsystem for Linux(WSL(时,我并没有意识到它实际上是一个与我的主操作系统基本上独立的系统。我在VS Code中使用WSL的终端,当我运行"node index.js"时,index.js正在WSL上运行。因此,它不知道在我的主操作系统的5432端口上运行的Postgresql的非常好、完全可访问的实例。

基本上,它拒绝连接到WSL上的5432端口,因为没有任何Postgres实例在WSL的那个端口上侦听;事实上,它甚至没有安装在WSL上。

我切换到我的Bash终端,运行"node index.js",将浏览器导航到调用GET请求的URL,该请求返回数据库中所有表的SELECT结果,瞧!它奏效了。

最新更新