जब मैं निम्नलिखित पंक्ति जोड़ता हूं res.status(201).json({ email }); मुझे त्रुटि संदेश मिलता है UnhandledPromiseRejectionWarning: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client। इस समस्या को सुलझाने में मैं क्या कर सकता हूं।

नीचे मेरे कोड का एक अंश है

module.exports.signup_post = (req, res ) => {
    const { firstname, lastname, email, password } = req.body;
 
    handleErrorSignup(firstname.trim(), lastname.trim(), email.trim(), password.trim())
        .then( async (errors) => {

            if(errors.firstname === '' && errors.lastname === '' && errors.email === '' && errors.password === '') {
                const hash = bcrypt.hashSync('password', 10);
                try {
                    await db.none('INSERT INTO users(firstname, lastname, email, password) VALUES($1, $2, $3, $4)', [firstname, lastname, email, hash]);
                    const token = createToken(email);
                    res.cookie('jwt', token, { httpOnly: true, maxAge: maxAge * 1000 });
                    res.status(201).json({ email });
                }               
                catch(err) {
                    res.status(400).send('Error, user not created');
                }
                res.redirect('/');
            }
            else {
                res.status(400).json({ errors });
            }
        });        
}
0
supmethods 4 सितंबर 2021, 14:25

1 उत्तर

सबसे बढ़िया उत्तर

यहां समस्या यह है कि आप पहले से ही कोशिश पकड़ने से प्रतिक्रिया भेज रहे हैं, इसलिए यदि आप अपने कोड के पहले के हिस्सों से पहले ही प्रतिक्रिया भेज चुके हैं तो आप रीडायरेक्ट नहीं कर सकते हैं।

आपको इस लाइन को अपने कोड से हटाने की जरूरत है, या केवल तभी रीडायरेक्ट करें जब प्रतिक्रिया पहले से ही कोशिश और पकड़ने वाले ब्लॉक में नहीं भेजी गई हो।

try {
  ...
  res.status(201).json({ email });
} catch (err) {
  res.status(400).send('Error, user not created');
}

// Remove below code
res.redirect('/');

यदि आप साइनअप के बाद अपनी होम स्क्रीन पर रीडायरेक्ट करना चाहते हैं, तो आपको बैकएंड से साइनअप के लिए प्राप्त स्थिति कोड या प्रतिक्रिया के आधार पर इसे फ्रंटएंड में संभालना होगा।

1
Kamesh 4 सितंबर 2021, 14:31
1
हां। मुझे इसे हटाना था। धन्यवाद।
 – 
supmethods
4 सितंबर 2021, 14:34