[英]ExpressJS: Error: Can't set headers after they are sent.
我正在嘗試向我的ExpressJS應用程序添加一個驗證方法,但是它似乎不太可行...我目前可以更改用戶名,但是,如果它具有空字符串,則該應用程序會崩潰,盡管它應該發送一個錯誤。 有什么建議么?
var validatePresenceOf = function(val, func) {
if (typeof val === 'undefined' || val.length < 1) {
res.json({
errors: {
userName: "Your name can't be blank"
}
});
} else {
return func;
}
};
validatePresenceOf(req.body.userName, User.findByIdAndUpdate( currentUser._id, {
local: {
name : req.body.userName
}
}, function (err, user) {
if (err) throw err;
res.json({
user : user
});
}));
Express調用setHeader方法兩次時給出錯誤。 驗證方法給出錯誤時,也許您忘記了或沒有使用“返回”! 請檢查一下。 我相信快遞驗證器對您來說是更好的解決方案
您不應在驗證檢查之前立即調用User.findByIdAndUpdate()
。
這可以暫時解決您的問題:
var validatePresenceOf = function(val, func) {
if (typeof val === 'undefined' || val.length < 1) {
res.json({
errors: {
userName: "Your name can't be blank"
}
});
} else {
func();
}
};
validatePresenceOf(req.body.userName, function() {
User.findByIdAndUpdate( currentUser._id, {
local: {
name: req.body.userName
}
}, function (err, user) {
if (err) throw err;
res.json({
user : user
});
});
});
但是,我建議使用express-validator作為請求驗證的最佳實踐。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.