weixin_48246197 2021-10-19 21:12 采纳率: 100%
浏览 1342
已结题

报错:ERR_HTTP_HEADERS_SENT 和 Cannot set headers after they are sent to the client

有没有帮忙看一下这是什么情况
大概的问题是:我在使用postman发送post请求后,它就会报错**

// 在这里定义和用户相关的路由处理函数,供 /router/user.js 模块进行调用

// 导入数据库模块
const db = require('../db/index')

// 注册用户处理的函数
exports.regUser = (req, res) => {
    const userinfo = req.body
        //判断是否合法
    if (!userinfo.username || !userinfo.password) {
        return res.send({ status: 1, message: '用户名或密码不合法!' })
    }

    //定义sql语句,查询用户名是否背占用
    const sqlStr = 'select * from ev_users where username=?'
    db.query(sqlStr, userinfo.username, function(err, results) {
        // 执行 SQL 语句失败
        if (err) {
            return res.send({ status: 1, message: err.message })
        }
        // 用户名被占用
        if (results.length > 0) {
            return res.send({ status: 1, message: '用户名被占用,请更换其他用户名!' })
        }
        // TODO: 用户名可用,继续后续流程...
    })

    res.send('reguser ok')
}

// 登录的处理函数
exports.login = (req, res) => {
    res.send('login ok')
}

报错的信息是

 throw err; // Rethrow non-MySQL errors
      ^

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
    at ServerResponse.setHeader (_http_outgoing.js:561:11)
    at ServerResponse.header (C:\Users\79274\Desktop\NODE\day6\code\03.api_server\node_modules\express\lib\response.js:771:10)
    at ServerResponse.send (C:\Users\79274\Desktop\NODE\day6\code\03.api_server\node_modules\express\lib\response.js:170:12)
    at ServerResponse.json (C:\Users\79274\Desktop\NODE\day6\code\03.api_server\node_modules\express\lib\response.js:267:15)
    at ServerResponse.send (C:\Users\79274\Desktop\NODE\day6\code\03.api_server\node_modules\express\lib\response.js:158:21)
    at Query.<anonymous> (C:\Users\79274\Desktop\NODE\day6\code\03.api_server\router_handler\user.js:23:24)
    at Query.<anonymous> (C:\Users\79274\Desktop\NODE\day6\code\03.api_server\node_modules\mysql\lib\Connection.js:526:10) 
    at Query._callback (C:\Users\79274\Desktop\NODE\day6\code\03.api_server\node_modules\mysql\lib\Connection.js:488:16)   
    at Query.Sequence.end (C:\Users\79274\Desktop\NODE\day6\code\03.api_server\node_modules\mysql\lib\protocol\sequences\Sequence.js:83:24)
    at Query._handleFinalResultPacket (C:\Users\79274\Desktop\NODE\day6\code\03.api_server\node_modules\mysql\lib\protocol\sequences\Query.js:149:8) {
  code: 'ERR_HTTP_HEADERS_SENT'
}
[nodemon] app crashed - waiting for file changes before starting...
  • 写回答

1条回答 默认 最新

  • CSDN专家-showbo 2021-10-20 11:51
    关注

    题主reguser路由出现了2次响应。
    第一次res.send('reguser ok')
    第二次是异步查询数据库后可能又send了一次,这是不同的响应。当然如果异步查询没有出错或者出现重复值,未调用res.send不会报错。报错的语句是异步查询中res.send导致的。

    将res.send('reguser ok')发到查询里面就行了。

    // 在这里定义和用户相关的路由处理函数,供 /router/user.js 模块进行调用
    // 导入数据库模块
    const db = require('../db/index')
    // 注册用户处理的函数
    exports.regUser = (req, res) => {
        const userinfo = req.body
        //判断是否合法
        if (!userinfo.username || !userinfo.password) {
            return res.send({ status: 1, message: '用户名或密码不合法!' })
        }
        //定义sql语句,查询用户名是否背占用
        const sqlStr = 'select * from ev_users where username=?'
        db.query(sqlStr, userinfo.username, function (err, results) {
            // 执行 SQL 语句失败
            if (err) {
                return res.send({ status: 1, message: err.message })
            }
            // 用户名被占用
            if (results.length > 0) {
                return res.send({ status: 1, message: '用户名被占用,请更换其他用户名!' })
            }
            //其他操作
            res.send('reguser ok');//////////放里面
        })
        ////////res.send('reguser ok')
    }
    // 登录的处理函数
    exports.login = (req, res) => {
        res.send('login ok')
    }
    
    

    有帮助麻烦点个采纳【本回答右上角】,谢谢~~

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月28日
  • 已采纳回答 10月20日
  • 创建了问题 10月19日

悬赏问题

  • ¥15 企业资源规划ERP沙盘模拟
  • ¥15 树莓派控制机械臂传输命令报错,显示摄像头不存在
  • ¥15 前端echarts坐标轴问题
  • ¥15 CMFCPropertyPage
  • ¥15 ad5933的I2C
  • ¥15 请问RTX4060的笔记本电脑可以训练yolov5模型吗?
  • ¥15 数学建模求思路及代码
  • ¥50 silvaco GaN HEMT有栅极场板的击穿电压仿真问题
  • ¥15 谁会P4语言啊,我想请教一下
  • ¥15 这个怎么改成直流激励源给加热电阻提供5a电流呀