簡體   English   中英

Node.js重定向問題為“錯誤:發送標頭后無法設置標頭”

[英]Nodejs redirecting issue as 'Error: Can't set headers after they are sent'

在nodejs中,當我在保存表單后嘗試重定向時,遇到一個類似“錯誤:發送標頭后無法設置標頭”的問題。 該應用程序曾經在這里崩潰。

這是代碼。

exports.createNewUser = function(req, res) {
   var data = {};
   data.title = 'All users';

      if(req.method == 'POST'){
        var firstName = req.body.firstName;
        var lastName = req.body.lastName;
        var email = req.body.email;
        var gender = req.body.gender;
        var mobile = req.body.mobile;
        var address = req.body.address;

        // Validation
        req.checkBody('firstName', 'Firstname is required').notEmpty();
        req.checkBody('lastName', 'Lastname is required').notEmpty();
        req.checkBody('email', 'Email is required').notEmpty();
        req.checkBody('email', 'Email is not valid').isEmail();
        req.checkBody('mobile', 'Mobile is required').notEmpty();
        req.checkBody('gender', 'Please choose you gender').notEmpty();
        req.checkBody('address', 'Address is required').notEmpty();
        req.checkBody('checkbox', 'You need to accept the terms').notEmpty();

        var errors = req.validationErrors();
        if(errors){
           data.errors = errors;
        }else{
           var passwordGen = generator.generate({length: 10,numbers: true});
           var newUser = new User({
             firstName: firstName,
             lastName:lastName,
             email: email,
             password: passwordGen,
             mobile : mobile,
             gender : gender,
             address : address
          });

          // save user to database
          newUser.save(function(err, doc) {
            if (err) {
                //console.error(err);
                data.error = 'There are some error';
                req.flash('error_msg', 'There are some error');
            }else{
                req.flash('success_msg', 'You created a new user');

                res.redirect('/users/all');

            }
         });
         console.log(data);
      }
  }

  res.render('user/add', data);
};

不知道我在做什么錯。 請幫忙。 謝謝。

保存新用戶后,您嘗試將用戶重定向到'/users/all' 但是在控制器的最后,您也嘗試呈現頁面。

您的代碼可能會成功創建新用戶並嘗試重定向,但在完成操作之前,它還會收到一個渲染頁面命令。 要解決此問題,您應該添加

req.flash('success_msg', 'You created a new user');

res.redirect('/users/all');

return;

通過包含返回,您可以確保重定向用戶,而不繼續其余的邏輯。

在newUser.save函數中,您會在函數內部列出err和doc。 doc不在其后的if else語句中。 那么,doc的意義是什么?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM