报错: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...

题主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')
}

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