解决Cannot set headers after they are sent to the client

问题原因

出现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: "删除用户失败",
            })
        }
    })
})


版权声明:本文为weixin_45481145原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。