解决Cannot set headers after they are sent to the client
短信预约 -IT技能 免费直播动态提醒
问题原因
出现Cannot set headers after they are sent to the client的原因,客户端发出一次请求,服务器给出两次及以上响应。
解决办法
建议大家排查一下接口,清除掉多余的响应。
// 第三方插件const mysql = require('mysql');// 数据库信息 let dbinfo = { host: '127.0.0.1', //数据库的ip地址 user: 'root', //登录数据库的账号 password: '123456',//数据库的密码 database: 'test', //数据库的名称 multipleStatements: true, // 支持执行多条 sql 语句}// 定义公共的数据库查询方法,传入三个参数 sql语句,res,参数:前两个为必传,参数不传默认为空数组let db = function (sql, res, params = []) { return new Promise((resolve, reject) => { // 一、新建一个连接池 let pool = mysql.createPool(dbinfo) // 二、连接 pool.getConnection((error, connection) => { // 三、使用sql语句操作 connection.query(sql, params, (err, results, fields) => { if (err) { // res是调用接口时,如果执行mysql执行出错,直接返回报错信息 res.send({ code: 500, status: false, msg: "服务器内部错误:" + err.message }) } else { resolve(results) } // 四、释放连接池 connection.release() }) }) })}
调用db方法示例
// router是express框架的路由 , db为我们定义的mysql查询方法const { router , utilSuccess , utilErr , db } = require('../../util/util');router.post('/deleteWxuser', (req,res)=>{ let { id } = req.body, deleteSql = 'delete from wxuser where id in (?)'; db( deleteSql , res , [ id ] ).then( sqldata =>{ if( sqldata.affectedRows ){ res.send({ ...utilSuccess, msg: "删除用户成功" }) }else{ res.send({ ...utilErr, msg: "删除用户失败", }) } })})
来源地址:https://blog.csdn.net/weixin_45481145/article/details/125455998
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341