它按預期在郵遞員中顯示錯誤 json,但之后它崩潰了。
- 發送成功 json 后不會崩潰
資料庫連接 POST /api/signup 200 84.443 ms - 27 events.js:377 throw er; // 未處理的“錯誤”事件 ^
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
at new NodeError (internal/errors.js:322:7)
at ServerResponse.setHeader (_http_outgoing.js:561:11)
at ServerResponse.header (/home/aman/Projects/Discover/discover_blog/backend/node_modules/express/lib/response.js:794:10)
at ServerResponse.send (/home/aman/Projects/Discover/discover_blog/backend/node_modules/express/lib/response.js:174:12)
at ServerResponse.json (/home/aman/Projects/Discover/discover_blog/backend/node_modules/express/lib/response.js:278:15)
at /home/aman/Projects/Discover/discover_blog/backend/controllers/auth.js:22:30
at /home/aman/Projects/Discover/discover_blog/backend/node_modules/mongoose/lib/model.js:5004:18
at processTicksAndRejections (internal/process/task_queues.js:77:11)
在函式實體上發出“錯誤”事件:在 /home/aman/Projects/Discover/discover_blog/backend/node_modules/mongoose/lib/model.js:5006:15 在 processTicksAndRejections (internal/process/task_queues.js:77: 11){代碼:'ERR_HTTP_HEADERS_SENT'}
//
const User = require("../models/user");
const shortId = require("shortid");
//
const signup = (req, res) => {
const { name, email, password } = req.body;
User.findOne({ email: email }).exec((err, user) => {
if (user) {
return res.status(400).json({
error: "Email is taken ",
});
}
});
let username = shortId.generate();
let profile = `${process.env.CLIENT_URL}/profile/${username}`;
let newUser = new User({ name, email, password, profile, username });
newUser.save((err, user) => {
if (err) {
return res.status(400).json({
error: err,
});
}
return res.json({
message: "Signup is successfull! Please signin",
user: user,
});
});
};
module.exports = { signup };
uj5u.com熱心網友回復:
您運行newUser.save得太早了 - 您需要等到.findOne完成,否則您將發送初始 400 狀態(電子郵件已被接收),然后發送一個帶有注冊結果的狀態。我還建議不要忽略可能的.findOne錯誤。
const signup = (req, res) => {
const { name, email, password } = req.body;
User.findOne({ email: email }).exec((err, user) => {
if (err) {
return res.status(400).json({
error: err,
});
}
if (user) {
return res.status(400).json({
error: "Email is taken ",
});
}
const username = shortId.generate();
const profile = `${process.env.CLIENT_URL}/profile/${username}`;
const newUser = new User({ name, email, password, profile, username });
newUser.save((err, user) => {
if (err) {
return res.status(400).json({
error: err,
});
}
return res.json({
message: "Signup is successfull! Please signin",
user: user,
});
});
});
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/468239.html
下一篇:前端HTTP請求是否必須匹配后端HTTP請求,例如:axios.patch和expressrouter.patch
