【发布时间】:2021-03-30 05:40:09
【问题描述】:
据我所知,当我发送响应时,注册功能并没有结束!我尝试将 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]:发送到客户端后无法设置标头
【问题讨论】:
-
警告:不要使用字符串插值来注入数据,始终使用 占位符值。这有严重的 SQL 注入错误。
-
您可能有两个
res.json()语句正在发生...res.json("Email is already used.")或res.json("User name is already used.")然后res.json("Added user")-return语句对于第一个到res.json的人不会终止register函数,它们只是终止当前回调函数 -
@tadman 我的老师让我这样做,但他没有告诉我为什么,现在我明白了,谢谢
-
我会将
//Hashing the password.和else中的所有内容放在if (result.length) {语句中......即if (result.length) { .... blah blah } else { //Hashing the password. etc }(实际上,它不必在else 中完全没有,因为你return在if) .... 所以 ... 将所有内容从//Hashing the password.移动到该函数的末尾,在该行上方的});内 -
我同意@Jaromanda X,node.js 中的 i/o 任务(包括网络和数据库任务,磁盘 i/o 任务)是异步的,你应该使用 async/await 来解决这个问题。
标签: javascript mysql node.js