我收到“发送给客户端后无法设置标头”

时间:2020-12-20 01:26:12

标签: javascript mysql node.js

据我所知,当我发送响应时,注册功能并没有结束!我尝试将 return 与 res 放在一起,但仍然存在同样的问题!

const connection = require("../../db");
const bcrypt = require("bcrypt");


const register = (req, res) => {

    const { user_name, password, phone, email } = req.body;
    const role_id = 0;
    var dateObj = new Date();
    const month = dateObj.getUTCMonth() + 1;
    const day = dateObj.getUTCDate();
    const year = dateObj.getUTCFullYear();
    const created_at = year + "/" + month + "/" + day;
    const is_disabled = 0

    // Cheacking if there is no email or user name in the database.
    let query = `SELECT * from users WHERE email = '${email}' OR user_name ='${user_name}' `;
    connection.query(query, (err, result) => {
        if (err) throw err;
        if (result.length) {
            if (email === result[0].email) {
                return res.json("Email is already used.")
                
            } else {
                return res.json("User name is already used.")
            };
        };
    });
    //Hashing the password.
    const hashPassword = bcrypt.hashSync(password, Number(process.env.SALT), (err, result) => {
        if (err) throw err
    });

    // Adding new user to database.
    query = `insert INTO users (email,phone,password,user_name,role_id,created_at,is_disabled) VALUES('${email}','${phone}','${hashPassword}','${user_name}','${role_id}','${created_at}','${is_disabled}')`
    connection.query(query, (err, result) => {
        if (err) throw err
    })
    return res.json("Added user")
}
module.exports = register

错误 [ERR_HTTP_HEADERS_SENT]:发送到客户端后无法设置标头

1 个答案:

答案 0 :(得分:1)

您应该在回调中移动密码散列/新用户代码,因为这些必须仅在电子邮件/用户名检查已经完成之后发生。否则,您将异步检查冲突创建帐户;可能会导致尝试将多个响应发送回客户端。

const register = (req, res) => {

    const { user_name, password, phone, email } = req.body;
    const role_id = 0;
    var dateObj = new Date();
    const month = dateObj.getUTCMonth() + 1;
    const day = dateObj.getUTCDate();
    const year = dateObj.getUTCFullYear();
    const created_at = year + "/" + month + "/" + day;
    const is_disabled = 0

    // Cheacking if there is no email or user name in the database.
    let query = `SELECT * from users WHERE email = '${email}' OR user_name ='${user_name}' `;
    connection.query(query, (err, result) => {
        if (err) throw err;
        if (result.length) {
            if (email === result[0].email) {
                return res.json("Email is already used.")
                
            } else {
                return res.json("User name is already used.")
            };
        };

        //Hashing the password.
        const hashPassword = bcrypt.hashSync(password, Number(process.env.SALT), (err, result) => {
            if (err) throw err
        });

        // Adding new user to database.
        query = `insert INTO users (email,phone,password,user_name,role_id,created_at,is_disabled) VALUES('${email}','${phone}','${hashPassword}','${user_name}','${role_id}','${created_at}','${is_disabled}')`
        connection.query(query, (err, result) => {
            if (err) throw err
        })
        return res.json("Added user")
    });
}