我有一些 IF/Else 狀態,在 IF 狀態中我可以進行重定向,但在其他狀態中我不能。我使用的代碼:
app.use(express.static(__dirname '/public'));
router.get('/',function(req,res) {
res.sendFile(path.join(__dirname '/public/html/index.html'));
var email = req.query.email;
conn.query("SELECT * FROM users WHERE email = ?", [email], function(err, result){
if (err) throw err;
var resultLength = result.length;
if (email != null && resultLength == 0) {
conn.query('INSERT INTO users (email) VALUES (?)', [email], function(err, result) {
if (err) throw err;
console.log('1 record inserted')
res.write('<p>You are now subscribed to our newsletter!</p>');
})
res.redirect('/succes')
}else{
console.log("You are already subscribed to our newsletter!")
res.redirect('/error')
}
})
});
uj5u.com熱心網友回復:
您可以對給定請求發送一個且僅一個回應。當你這樣做時:
res.sendFile(...)
發送對傳入請求的回應。嘗試發送任何其他請求將導致有關“在已發送標頭后無法發送標頭”的錯誤。
然而,在您的代碼中,您隨后嘗試同時執行res.write(...)和res.redirect(...)。你根本做不到。您可以對給定的傳入請求發送一個且只有一個回應。您已經發送了一份res.sendFile(...)。
然后,更進一步,你不能做 a res.write(...),然后跟著res.redirect(...). 這樣做res.write(...)意味著 http 庫必須發送標頭,以便它現在可以開始發送正文。因此,這會強制發送標頭。但是,現在當您執行 a 時res.redirect(...),您是在告訴 Express 庫您要設定 302 狀態代碼并且要設定Location標頭。嗯,但是狀態碼已經被發送,并且頭部已經被發送,被res.write(...). 所以,在這一點上,res.redirect(...)不能完成它的作業。
目前還不清楚這段代碼應該做什么。您要么正在服務,index.html要么正在執行其他重定向到不同 URL 的操作。同一條路線不能同時進行這兩種操作。對于這樣的路由,您要么發送 HTML 回應,要么重定向到另一個 URL。選一個。
這是一種可能的解決方案,僅包含res.redirect():
router.get('/', function(req, res) {
const email = req.query.email;
if (!email) {
console.log("req.query.email not present");
res.redirect('/error')
return;
}
conn.query("SELECT * FROM users WHERE email = ?", [email], function(err, result) {
if (err) {
console.log(err);
res.redirect('/error')
return;
}
const resultLength = result.length;
if (resultLength == 0) {
conn.query('INSERT INTO users (email) VALUES (?)', [email], function(err, result) {
if (err) {
console.log(err);
res.redirect('/error')
return;
}
console.log('1 record inserted')
res.redirect('/succes');
return;
})
} else {
console.log("You are already subscribed to our newsletter!")
res.redirect('/error')
return;
}
});
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/496246.html
