You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署到共享主机时mysql2抛出lru-cache语法错误求解决

解决Hostinger共享主机上Node.js连接MySQL的两个问题(语法错误/连接断开)

一、解决SyntaxError: Unexpected token ;错误

问题原因

你使用的lru-cache@10.1.0和mysql2@3.0.0都要求Node.js 16及以上版本,但Hostinger共享主机默认的Node版本大概率低于16,旧版本Node无法解析这些依赖里的ES6+语法(比如报错行的单独heap;语句),导致编译失败。

解决方案

方案1:降级依赖到兼容低Node版本的版本

修改package.json里的对应依赖:

"lru-cache": "^7.18.3",
"mysql2": "^2.3.3"

然后在SSH终端执行:

rm -rf node_modules package-lock.json
npm install

方案2:升级服务器的Node.js版本

Hostinger支持通过nvm切换Node版本,SSH里执行以下命令:

# 安装Node.js 16版本
nvm install 16
# 切换到16版本
nvm use 16
# 设置为默认版本(下次登录自动使用)
nvm alias default 16

完成后重新安装依赖并运行项目即可。


二、解决MySQL连接自动断开的问题

问题原因

旧版mysql@2.18.1存在兼容性问题,且默认配置没有重连机制,加上Hostinger共享主机的网络环境可能存在超时限制,导致连接频繁断开。

解决方案

推荐方案:改用降级后的mysql2并配置连接池

mysql2的稳定性比旧版mysql更好,配合连接池和重连配置可以有效解决断开问题:

const mysql = require('mysql2/promise');

// 创建连接池
const pool = mysql.createPool({
  host: '你的数据库远程地址',
  user: '数据库用户名',
  password: '数据库密码',
  database: '目标数据库名',
  waitForConnections: true,
  connectionLimit: 10,
  queueLimit: 0,
  // 开启长连接保活
  enableKeepAlive: true,
  keepAliveInitialDelay: 0,
  // 延长超时时间适配共享主机环境
  connectTimeout: 60000,
  acquireTimeout: 60000,
  timeout: 60000
});

// 使用示例:执行查询
async function query(sql, params) {
  const [rows] = await pool.execute(sql, params);
  return rows;
}

备选方案:给旧版mysql添加重连逻辑

如果坚持使用mysql@2.18.1,可以手动实现重连机制:

const mysql = require('mysql');
let connection;

function handleDisconnect() {
  connection = mysql.createConnection({
    host: '你的数据库远程地址',
    user: '数据库用户名',
    password: '数据库密码',
    database: '目标数据库名'
  });

  connection.connect(err => {
    if (err) {
      console.log('连接失败,10秒后重试:', err);
      setTimeout(handleDisconnect, 10000);
    }
  });

  connection.on('error', err => {
    console.log('数据库连接异常,触发重连:', err);
    if (err.code === 'PROTOCOL_CONNECTION_LOST') {
      handleDisconnect();
    } else {
      throw err;
    }
  });
}

// 初始化连接
handleDisconnect();

额外检查项

  1. 在Hostinger数据库面板中,确保已将服务器IP或%(允许所有IP)添加到远程访问白名单;
  2. 确认Hostinger防火墙没有拦截MySQL的3306端口。

内容的提问来源于stack exchange,提问作者Anant Gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 20:07:11