javascript - 我收到“发送到客户端后无法设置标题”
问题描述
据我了解,当我发送响应时,注册功能并没有结束!我试图用 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]:在将标头发送到客户端后无法设置标头
解决方案
您应该在回调中移动密码哈希/新用户代码,因为这些必须仅在电子邮件/用户名检查完成后发生。否则,您将异步检查冲突并创建帐户;可能导致尝试将多个响应发送回客户端。
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")
});
}
推荐阅读
- django - 没有任何内容写入 Nginx access.log/error.log - 如何进行故障排除?
- java - 如何修复 CountDownTimer 在 android 应用程序中的错误
- r - 有没有办法根据文本进行过滤?
- javascript - 如果基于特定字段不存在,MongoDB 将项目添加到文档数组
- java - 从国际象棋中搜索国王的每一个方向
- terraform - 如何修复 Terraform 中的 badRequest 错误 400?
- linux - 从没有文件句柄的内存映射文件中清除操作系统缓存
- html - 使用带有变换的位置粘性时出现问题:比例
- ios - 如何使用 Alamofire 更改全局变量?
- java - GcsFilename 的 Eclipse ClassNotFoundException 的 Google Cloud 工具