返回

剖析 TypeError: connection.query 不是函数 - 全面的解决方案指南

mysql

解决 TypeError: connection.query 不是函数

作为一名经验丰富的程序员和技术作家,我将深入探讨导致 TypeError: connection.query is not a function 错误的原因,并提供详细的解决方案。

错误原因

当你在另一个 .js 文件中传递连接时,可能会遇到此错误。这是由于以下原因之一:

连接对象未正确传递

确保连接对象已正确从 server.js 文件传递到出错的文件。

连接尚未建立

验证是否已建立到数据库的连接,且已通过 connection.connect() 函数进行。

解决方案

确保连接对象正确传递

  • server.js 中,使用 module.exports 导出连接对象。
  • 在出错的文件中,使用 require 导入连接对象并检查导入路径是否正确。

确保连接已建立

  • 检查数据库凭据是否正确。
  • 确保已使用 connection.connect() 函数建立连接。
  • 仅在连接建立后才能使用 connection.query() 函数。

其他可能解决方案

  • 确保已安装 mysql 模块。
  • 检查 mysql 版本是否与 Node.js 版本兼容。
  • 重启服务器以清除缓存问题。

示例代码

server.js

const mysql = require('mysql');
const connection = mysql.createConnection({
  // 数据库配置
});

connection.connect((err) => {
  if (err) {
    console.error('Error connecting to MySQL:', err);
    return;
  }
  console.log('Connected to MySQL');
});

module.exports = connection;

出错的文件 (例如,authRoutes.js)

const express = require('express');
const router = express.Router();
const connection = require('../server'); // 导入连接对象

console.log(connection);

// 路由代码

避免循环依赖项警告

如果你看到有关循环依赖项的警告,请考虑使用 require 缓存或循环依赖兼容的模块加载器(例如 esm)。

常见问题解答

  1. 如何确定连接对象是否已正确传递? 打印连接对象并检查其值是否与 server.js 中导出的对象匹配。
  2. 如何修复连接尚未建立的问题? 检查数据库凭据、连接函数的调用以及连接建立后的日志消息。
  3. 如何确保 mysql 模块已安装? 运行 npm install mysql 命令。
  4. 为什么需要在连接建立后才能使用 connection.query() 函数? connection.query() 依赖于已建立的连接。
  5. 如何避免循环依赖项警告? 使用 require 缓存或循环依赖兼容的模块加载器。

结论

解决 TypeError: connection.query is not a function 错误需要对连接对象的传递和数据库连接的建立进行仔细检查。通过遵循本指南中的步骤,你可以迅速解决此错误并避免循环依赖项警告。