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