首个Node.js应用报错:ReferenceError: Pool未定义如何解决?
解决ReferenceError: Pool is not defined的问题
嘿,我一眼就揪出问题所在啦!你在引入pg模块的Pool构造函数时,不小心把它赋值给了Client变量,但后面创建实例的时候却调用了new Pool()——这就导致Node.js找不到Pool这个变量,直接抛出了ReferenceError,就像你把钥匙放进了抽屉却去柜子里找一样😅
问题根源就在这一行:
const Client = require('pg').Pool
你把pg.Pool构造函数存进了Client变量里,但后续代码却试图使用未定义的Pool,这完全是变量名不匹配导致的低级失误~
两种简单修正方案:
方案1:把变量名改成Pool(推荐,语义更清晰)
var express = require("express"); var app = express(); var port = process.env.PORT || 3000; // 让变量名和构造函数对应,避免混淆 const Pool = require('pg').Pool app.get("/", function(req,res){ res.send("Wassup!"); }); // 现在用new Pool()就能正常创建连接池实例了 const client = new Pool({ connectionString: process.env.DATABASE_URL, }) client.connect(); client.query('SELECT table_schema,table_name FROM information_schema.tables;', (err, res) => { if (err) throw err; for (let row of res.rows) { console.log(JSON.stringify(row)); } client.end(); }); app.listen(port);
方案2:如果想保留Client变量名,就用new Client()创建实例
var express = require("express"); var app = express(); var port = process.env.PORT || 3000; const Client = require('pg').Pool app.get("/", function(req,res){ res.send("Wassup!"); }); // 这里改成new Client(),和前面的变量名对应 const client = new Client({ connectionString: process.env.DATABASE_URL, }) // 后续代码保持不变即可 client.connect(); client.query('SELECT table_schema,table_name FROM information_schema.tables;', (err, res) => { if (err) throw err; for (let row of res.rows) { console.log(JSON.stringify(row)); } client.end(); }); app.listen(port);
额外小建议:
- 尽量统一用
const/let代替var声明变量,这样作用域更清晰,能避免不少隐性bug; - 数据库连接池最好抽成单独的模块管理,不要直接写在主文件里,后续维护和复用会方便很多;
- 记得给
client.connect()加上错误回调,比如client.connect(err => { if(err) console.error(err) }),避免连接失败直接导致程序崩溃。
内容的提问来源于stack exchange,提问作者Simonsoft177
相关产品推荐
相关产品推荐

