器上的 ERR"/>
Express 服务器上的 ERR
我是 Node.js 和 Express 的新手,所以我缺乏异步编程的知识。我目前正在尝试为我的 Express 服务器上的应用程序创建一个简单的注册表端点,但我一直遇到此错误:ERR_HTTP_HEADERS_SENT:将标头发送到客户端后无法设置标头。我检查了代码中的所有地方,并确保只执行一次 res.send() 函数。
这是我所拥有的一个简短片段:
app.post('/register', (req, res, done) => {
register(req, res).then((response) => {
res.send({
success: response.success,
message: response.message
});
}).catch((error) => {
console.log(error);
});
done();
});
function register(req, res) {
return new Promise((resolve, reject) => {
if (req.body.password != req.body.confirmPassword) {
resolve({
success: false,
message: "Passwords need to match."
});
}
else {
userExists(req, res).then((response) => {
resolve(response);
}).catch((error) => {
reject({
success: false,
message: error.message
});
});
}
});
}
function userExists(req, res) {
return new Promise((resolve, reject) => {
findUser(req.body.username).then((response) => {
if (response.length > 0) {
resolve(true);
}
else {
resolve(false);
}
}).catch((error) => {
reject(new Error(error.message));
});
});
}
function findUser(username) {
return new Promise((resolve, reject) => {
connection.query("SELECT * FROM users WHERE USERNAME=?", username, function(error, results, fields) {
if (error) {
reject(new Error(error.message));
}
else {
resolve(results);
}
});
});
}
我读到错误通常发生是因为 res.send() 函数被执行了不止一次。我本来有多个 res.send() 命令,但它们被 if/else 控制结构分隔开,超过一个就不会被执行。尽管如此,我还是尝试通过创建一个 register() 函数来合并所有这些语句,该函数将返回一个包含我需要发送的所有数据的已解决的 Promise,但这也没有用。
提前谢谢你!
回答如下:更多推荐
Express 服务器上的 ERR
发布评论