2015-06-23 4 views
0

Я новичок в земле узлов, и у меня есть случай, как показано ниже, где я сначала хочу установить файл cookie, а затем перенаправить на другой URL-адрес. Но я получаю ошибку - Unhandled rejection Error: Can't set headers after they are sent.Node.js и Express.js Ошибка: не удается установить заголовки после их отправки

user_details = [req.body.user_name, req.body.user_email, req.body.user_contact, req.body.route_id]; 
var user_details_str = JSON.stringify(user_details); 
res.cookie('user_details', user_details_str, {maxAge : 7 * 24 * 3600000, httpOnly:false}); 
res.redirect('/route1'); 

Я прошел через этот Node.js Error: Can't set headers after they are sent и понял, что res.redirect() пытается переписать заголовок, но не знает, как решить эту проблему.

EDIT: полный код.

router.post('/register', encryptor.encryptUserPassword, function(req, res, next) { 
    req.body.confirmed = false; 

    Models.users.create(req.body).then(function(user) { 


    user_details = [req.body.user_name, req.body.user_email, req.body.user_contact, req.body.route_id]; 
    var user_details_str = JSON.stringify(user_details); 
    res.cookie('user_details', user_details_str, {maxAge : 7 * 24 * 3600000, httpOnly:false}); 

    user.user_pass = ''; 
    sess = res.session; 
// sess.email = user.user_email; 
    Models.user_ride.create({user_id:user.user_id,route_id:req.body.route_id}).then(function(userroute){ 
     res.send(user); 
    }); 

    res.redirect('/route1'); 
    }).error(function(err) { 
    res.send(err); 
    }).catch(Sequelize.ValidationError, function(err) { 
    res.send(err); 
    }); 
}); 
+0

Ничего плохого в коде, который вы публикуете, поэтому я предполагаю, что вы не показываете весь соответствующий код. – robertklep

+0

Попробуйте 'return res.redirect ('/ route1');' –

+0

@robertklep Добавлено полный код в редакторе. – anon

ответ

6

Проблема эта часть:

Models.user_ride.create({user_id:user.user_id,route_id:req.body.route_id}).then(function(userroute){ 
    res.send(user); 
}); 

res.redirect('/route1'); 

Вы оба отправки ответа с помощью res.send()и выполняет редирект с помощью res.redirect(). Вам нужно выбрать тот или другой.

Смежные вопросы