发布于2026-07-07 阅读(0)
扫一扫,手机访问

const connection = mysql.createConnection({host: 'localhost',// 数据库服务器地址(本地为localhost)user: 'your_username',// 数据库用户名password: 'your_password', // 数据库密码database: 'your_database' // 目标数据库名});
需要注意几个细节:拼写错误(比如把`host`写成`hst`)、遗漏的配置项(比如忘了写`database`),以及密码这类敏感信息是不是填对了。很多连接失败都是这种“一眼看过去没啥问题,但仔细一查就能发现”的小毛病。
# MySQL示例sudo systemctl status mysql# PostgreSQL示例sudo systemctl status postgresql
如果服务没启动,那就用以下命令把它拉起来:
sudo systemctl start mysql# 或postgresql
另外,还可以通过`netstat -tulnp | grep <端口>`(比如MySQL默认是3306端口)或者`ss -tulnp | grep <端口>`来确认数据库是否在监听正确的端口。服务跑起来了,但端口不对,照样连不上。
# 临时禁用防火墙测试(生产环境不建议)sudo ufw disable# 或添加允许规则sudo ufw allow 3306/tcp
当然,如果数据库就在本地,这段可以跳过。但要是远程数据库,不光本机防火墙要放行,远程服务器那边的防火墙也得打开对应端口,否则连不上就是白搭。
-- 查看用户权限SHOW GRANTS FOR 'your_username'@'localhost';-- 授权(示例:授予所有权限)GRANT ALL PRIVILEGES ON your_database.* TO 'your_username'@'localhost';-- 刷新权限FLUSH PRIVILEGES;
权限不足的时候,数据库会毫不客气地甩给你一个“Access denied”错误。这时候别犹豫,去查查用户权限配置。
npm install mysql2@latest# 或pg、mongodb
驱动版本过旧导致的连接失败也很常见,比如经典的“ER_NOT_SUPPORTED_AUTH_MODE”错误。升级一下驱动往往就能解决。
sudo tail -f /var/log/mysql/error.log# 实时查看MySQL日志
日志里的错误信息(比如“Access denied for user”)往往能直接指向问题根源,省去不少瞎猜的时间。
const pool = mysql.createPool({host: 'localhost',user: 'your_username',password: 'your_password',database: 'your_database',connectionLimit: 10,// 连接池最大连接数(根据并发需求调整)idleTimeoutMillis: 30000, // 连接空闲超时时间(毫秒)connectionTimeoutMillis: 2000 // 连接超时时间(毫秒)});
常见问题有两个:一是`connectionLimit`设得太小,并发一高就会出现“Too many connections”错误;二是`connectionTimeoutMillis`设得太短,连接还没建立就超时了,报错信息里会带ETIMEDOUT。
ECONNREFUSED):数据库服务没启动或者端口写错了;ER_ACCESS_DENIED_ERROR):用户名或密码不对;ETIMEDOUT):网络不通或者防火墙拦截;Cannot find module 'mysql2'):驱动压根没安装。ping <数据库服务器IP>traceroute <数据库服务器IP>
网络延迟太高或者有丢包,也会导致连接超时报错。这时候就得去排查网络设备或者云服务商的安全组配置了。
const mysql = require('mysql2/promise');async function queryDatabase() {let connection;try {connection = await mysql.createConnection({ /* 配置 */ });const [rows] = await connection.execute('SELECT * FROM users');console.log(rows);} catch (err) {console.error('Database error:', err); // 记录错误} finally {if (connection) await connection.end(); // 确保连接关闭}}queryDatabase();
未处理的`Promise`拒绝(`UnhandledPromiseRejectionWarning`)会让应用直接崩溃,数据库连接自然也就断了。所以,try/catch和finally必须安排上,确保每次操作都能正确关闭连接。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8