问题标签 [node-mysql2]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
node.js - 如何为加入的mysql表设置限制?
我正在尝试将 3 个表中的数据与以下查询相结合
版本:mysql 5.7
它运作良好。但我需要限制从video
表到LIMIT 10
每个类别的行
有什么想法吗?
node.js - 基于性能、稳定性和 ES8+ 支持的 Knex 与 mysql2
有没有人对这两个数据库库都有实践经验 -knex
与mysql2
?
经过一番谷歌搜索(例如在NPMCompare),我仍然很想知道,根据实际经验,这两种选择的优缺点是什么?
到目前为止,我清楚地看到使用knex
over的唯一真正优势mysql2
是它对 MSSQL、MySQL、PostgreSQL、SQLite3 和 Oracle 的普遍支持,而后者仅支持 MySQL,但由于目前我只专注于 MySQL, thisknex
的功能似乎不太相关。
我会考虑的参数:
- 性能和负载电阻;
- 稳定性(生产就绪);
- 原生 ES8+ 支持(callback-hell-free,没有额外的
Util.promisify
包装,ESM/MJS支持); - 简洁明了,越少越好。
javascript - 如何调试“Jest 检测到以下...打开句柄可能会阻止 Jest 退出”
我在 Jest 中遇到了异步代码的进一步问题。我之前的问题(针对同一个项目)与在 Jest 引导程序中运行异步代码有关。我的新问题与在测试中运行异步数据库调用有关。我的目标是连接到数据库服务并进行调用以确保它们正确读取和写入数据库。我在一个 Docker 容器中运行测试,连接到另一个容器中的 MySQL 实例。
我正在使用mysql2/promise
Node 库,正如同样的建议,它将基于回调的数据库操作包装在 Promise 中。大多数操作都是异步的,除了连接关闭(和其他一些)。确实,我想知道这是否相关。
我应该从一些代码开始。这是我的测试:
这只是运行几个虚拟测试。他们什么都不做,我只是想让之前/之后的钩子工作。这些是他们应该做的:
- beforeAll - 连接数据库一次(异步操作)
- afterAll - 与数据库断开一次(mysql2中的同步操作)
- beforeEach -
database.beforeEachTest()
在每次测试之前运行,这会截断数据库中的表(异步操作)
如下TestDatabase
所示 - 这些是我编写的用于帮助进行数据库测试的实用方法:
现在,如果我运行测试,它们会通过并完成,但有两个奇怪之处。首先,一些异步 console.log 输出是在测试摘要之后输出的,所以我认为我没有按照 Jest 想要的方式处理异步。换句话说,我认为应该在所有这些之后呈现摘要:
如您所见,两个测试的输出出现在摘要之后,但beforeEach
第一个测试的输出出现在测试摘要之前。
此外,如果我添加使用数据库的真实测试,我会收到错误消息说我有未处理的承诺,我应该尝试 Jest 的未处理承诺检测器 ( --detectOpenHandles
)。此外,在这种情况下,Jest 会在循环中停止并需要 ^C 来返回控制台提示。
所以,我正在尝试--detectOpenHandles
使用当前代码,虽然我没有得到 Jest 冻结,但我得到了以下内容。
我的观点是,这与我通过更多测试获得的冻结直接相关,我应该在尝试添加更多测试之前解决这个问题。
我已经通过几个调查循环来确定可能导致这种情况的原因,并且代码已经过多次调整:
afterAll
并且beforeEach
是异步操作,因此需要将它们return
编入 Jest,因此 Jest 知道等待它们解决。afterAll
关闭数据库,但这不是异步的,所以我在done()
这里使用 Jest,尽管如果没有done()
.TestDatabase
包含两个主要方法,beforeEachTest
和connect
,我一直非常小心地确保它们返回 Promises。- 我倾向于使用链式 thenables,而不是 async-await,因为它让我感觉更清楚。但是,我在几个方面尝试了 async-await,但没有帮助。
- 像
dropDatabase
,createDatabase
,setForeignKeyChecks
,truncateTables
之类的实用程序代码truncateTable
都返回 Promises。 - 我已经阅读了Jest 异步文档,并且有很多方法。主要的收获是,如果你正在测试异步的东西,promise 应该返回给 Jest,所以适当的等待就完成了。我真正的测试是同步的,只是我的 before 钩子是异步的。想了想,不知道是不是这个问题?
我对 Jest 还很陌生,对 JS 异步也没有太多经验。每次我认为我对异步的理解有所提高时,我都会得到一个新的曲线球。但是,我想知道这是否是更多的笑话,而不是理解原始异步的困难。
mysql - Mysql auth 问题客户端和服务器端
我试图通过 node-mysql2 连接到 mysql 5.0.95 数据库,但根据 node-mysql,它的握手很糟糕,根据 node-mysql2,它是:
“错误:服务器请求使用未知插件进行身份验证。请参阅 TODO:在此处添加插件文档以了解如何配置或创作身份验证插件。”
mysql2 的 github 引用了不受支持的 sha-256 身份验证插件,但错误指定了插件,我的只是说“。” 反而。
我尝试在 mysql 数据库上创建一个新用户,但是如果我尝试使用
它失败了
ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“WITH mysql_native_password BY 'password'”附近使用正确的语法
WITH 选项会导致语法错误,并且由于某种原因不能使用。任何人都知道我可以做些什么来让一些节点mysql驱动程序连接到这个数据库?
node.js - 基于用户的设置 time_zone mysql2 nodejs
我将销售日期作为 UTC 存储在 mysql 表的 TIMESTAMP 列中。
世界各地的用户需要在其基于时区的设置中显示销售额
如何使用 mysql2 npm 包为每个用户请求设置时区?
mysql - 用于 Node.Js 的 Mysql2 是否需要在执行 queires 之前在 mysql.CreateConnection 上运行 connect()
我最近将一个 node.js 项目从 mysqljs 迁移到 mysql2 ( https://www.npmjs.com/package/mysql2 ),因为它有一些我需要的附加功能。对于我的数据库调用,我正在导出通过运行创建的连接,mysql.createConnection({CONFIG})
然后由其他文件导入,然后使用执行命令执行查询。
在我过渡之前,在我设置数据库连接的文件中,我有这个:
我的代码在没有 connection.connect 函数的情况下运行起来很有趣。删除它是否会对性能产生任何影响,或者 mysql2 是否保持开放连接,或者连接的创建可以忽略不计?在导出之前保留这条线还是删除它更好?
mysql - 有没有更好的方法在 node.js 中将一行插入 MYSQL 数据库?
所以我将使用 mysql2 驱动程序将 Mysql 与节点一起使用。假设我连续有 25 到 30 个字段,我是否必须在从正文中提取每一列后手动编写每一列。我目前的方法如下,这是完整的控制器以便更好地理解。
所以,我唯一关心的是我在一行中插入字段的部分,我觉得我写了很多次列名,有什么办法可以像猫鼬一样把正文插入行中?
node.js - AWS Lambda ERR_STREAM_WRITE_AFTER_END 上的 Node.js mysql2
我在 AWS Lambda 上使用 Node.js mysql2 库时遇到了一个奇怪的错误。
我正在我的 AWS Lambda 函数中连接到 AWS Aurora 上的 mysql 数据库。
我查询
这一直工作得很好。
这个特定的 AWS Lambda 函数由 Webhook 通过 API Gateway 调用。
只有当 webhook 调用该函数时,我才会收到此错误消息,说明 mysql 连接在查询之前已关闭。
无论在哪里调用 connection.end() 或 connection.close(),查询之前都没有任何意义。
当使用与webhook 传递的相同主体从 PostMan 调用该函数时,该函数可以很好地通过查询。连接没有关闭!
API Gateway 的 AWS Lamba 事件中是否存在可能导致连接中断的内容?为什么 node.js mysql2 只有在 webhook 请求的情况下才会抛出这个错误?
要完成 AWS Lambda 日志错误是:
除此之外,查询位于 try catch 块内,但 AWS Lambda 显示“未捕获的异常”
感谢您的帮助,亚历克斯
mysql - 如何使用nodejs连接到远程mysql服务器?
我需要从我的 nodejs 应用程序连接到远程 mysql 数据库。下面是我的代码。
我收到上述代码的以下错误
const mysqlssh = require('mysql-ssh');
我的上述设置出现以下错误。
我可以使用代码中给出的相同凭据通过 putty 登录到我的 mysql 实例。那么使用nodejs连接到远程mysql数据库的正确方法是什么?
node.js - 具有 Mysql2 时区问题的节点
当我尝试使用 mysql2 设置时区时,会收到以下消息。 MySQL工作正常。
但我只能使用 mysql2
问题
忽略传递给 Connection: IST 的无效时区。这目前是一个警告,但是在 MySQL2 的未来版本中,如果你给一个 Connection 一个无效的配置选项,将会抛出一个错误