[英]express - Error: Can't set headers after they are sent
您好,我嘗試了所有操作,但是以下非常簡單的代碼為我提供了“發送后無法設置標題”錯誤,對於您輸入的幾天我一直在努力
app.post('/login', function (req, res) {
var emailpassed = req.body.email
var shaObj = new jsSHA('SHA-256', 'TEXT')
shaObj.update('zzzz' + req.body.password)
var hash = shaObj.getHash('HEX')
var params = {
TableName: 'passengers',
IndexName: 'emailpass',
ProjectionExpression: 'password',
KeyConditionExpression: '#yr = :yyyy',
ExpressionAttributeNames: {
'#yr': 'email'
},
ExpressionAttributeValues: {
':yyyy': emailpassed
}
}
docClient.query(params, function (err, data) {
if (err) {
console.log('No such user found.1')
} else {
data.Items.forEach(function (item) {
if (item.password != hash) {
console.log('Incorrect password.1')
} else {
var payload = {id: item.pid, password: hash}
var token = jwt.sign(payload, 'sa')
if (token) {
return res.json({token: token})
}
}
})
console.log('daaakey')
}
})
return;
}
)
您正在.forEach()
循環內調用res.json()
,這意味着您可以在data.Items.length
大於1
且滿足某些其他條件時data.Items.length
調用它。 請記住,當您確實return res.json()
,該return
是從.forEach()
回調返回的,因此.forEach()
循環繼續運行,並且再次調用了該回調。 您看到的錯誤是由於嘗試向給定請求發送多個響應而導致的,這是不允許的。
您需要重組代碼流,以使您的.forEach()
循環收集輸入(通常在數組中),然后在循環完成后發送一個包含所有數據的響應,或者僅打算在循環上發送響應。找到第一個令牌,然后您可能要切換到常規for
循環,以便在發送帶有return
或break
的響應(避免發送另一個)后可以退出循環。 從您的代碼中尚不清楚您可能打算使用哪種方案(僅發送第一個數據或累積所有數據並全部發送)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.