gpt4 book ai didi

javascript - 为什么这个mysql错误导致nodejs崩溃而不是去catch函数?

转载 作者:可可西里 更新时间:2023-11-01 07:38:22 24 4
gpt4 key购买 nike

我有一个创建条目的mysql语句,它有一个.then函数和一个.catch函数,但是当出现以下错误时:

TypeError('绑定(bind)参数不能包含undefined。要传SQL NULL指定JS null');

服务器崩溃而不是像 .catch 函数中定义的那样回答 500

注意:我正在使用来自 npm 的 mysql2 库和 promises (require('mysql2/promise');)

这是调用它的代码(req.params.account_nameundefined):

const CREATE_ACCOUNT_STATEMENT =
'INSERT INTO `Accounts` (`account_token`, `account_name`) VALUES (?, ?)'

try {
mysqlConnectionPool.execute(CREATE_ACCOUNT_STATEMENT, [
account_token, account_name
])
.then(() => {
res.end(JSON.stringify({ token: account_token }))
})
.catch((e) => {
debug(1, "error while trying to create account:", e)
res.status(500).end("Internal Server Error")
})
} catch(e) {
debug(1, "error while trying to create account:", e)
res.status(500).end("Internal Server Error")
}

最佳答案

实际上,@Quentine 接近正确的事情......

它“有点”是 mysql2 中的一个错误,我使用 sort-of 因为 https://github.com/sidorares/node-mysql2/issues/902提示mysql2的开发组没问题。与它。

mysql2.pool 将调用传递给创建的连接的方式存在问题,它不会将异常传递给包装 promise 。

我最终创建了自己的包装函数来创建连接 + 调用执行包装在适当的 promise 处理中。

import mysql = require('mysql2');
private async queryDB(query:string, useExecute: boolean = false, ...args:any[]) : Promise<any[]>
{
return new Promise<any[]>((resolve, reject)=>{
for(var i = 0; i < args.length; ++i)
{
if(args[i]===undefined)
args[i] = null;
}
this.dbPool.getConnection((err, conn)=>{
if(err){
reject(err);
return;
}

let cb = function(err: mysql.QueryError, results: any[], fields: mysql.FieldPacket[]) {
conn.release();
if(err)
{
reject(err);
return;
}
resolve(results);
}
if(useExecute)
conn.execute(query, args, cb);
else
conn.query(query, args, cb);
});
});
}

关于javascript - 为什么这个mysql错误导致nodejs崩溃而不是去catch函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52949451/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com