首页 > 解决方案 > 我收到“发送到客户端后无法设置标题”

问题描述

据我了解,当我发送响应时,注册功能并没有结束!我试图用 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]:在将标头发送到客户端后无法设置标头

标签: javascriptmysqlnode.js

解决方案


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

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")
    });
}

推荐阅读