2016-09-13 14 views
1

私は盲目であるかどうかはわかりませんが、私は応答を2回送信しようとしています。 エラーが発生しましたError: Can't set headers after they are sent.Express/Node:エラー:送信後にヘッダーを設定できない

transporter.sendMail()機能で送信されたレスポンスが来ているようです。

マイコード:

router.route('/email').post(function(req, res) { 
    var dir = req.body.moduleCode 
     + '/' 
     + req.body.year 
     + '/' 
     + req.body.semester 
     + '/' 
     + req.body.assignCode 
     + '/'; 

    for (i in req.body.documentsNoExt) { 
     Student.findById(req.body.documentsNoExt[i], function (err, student) { 
      if (err) { 
       console.log(err); 
      } 
      var mailOptions = { 
       from : '"Feedbacker" <[email protected]>', 
       to: student.email, 
       subject: 'Mark feedback for ' + req.body.assignCode, 
       text: 'Dear ' + student.firstName + ' ' + student.lastName + ',' 
       + 'Please find attached your feedback for the assignment ' + req.body.assignCode + ' module ' + req.body.moduleCode + '.', 
       attachments: [ 
        { 
         path: './server/pdfs/' + dir + student._id + '.pdf', 
        } 
       ] 
      } 
      transporter.sendMail(mailOptions, function(error, info) { 
       if(error) { 
        console.log(error); 
       } 
       return res.status(200).json({ message: 'Successfully sent emails!' }); 
      }) 
     }) 
    } 
}); 

ここに私のHTTP POSTがangular2である:

sendEmail(documents, assignment) { 
     this.progress = 1; 
     var documentsNoExt = documents.map(function (e) { 
      return e.replace(/\.[^/.]+$/, ""); 
     }); 
     var emailInfo = { 
      "moduleCode" : assignment.modInsID[0].modID[0]._id, 
      "year"   : assignment.modInsID[0].year, 
      "semester"  : assignment.modInsID[0].semester, 
      "assignCode" : assignment.code, 
      "documentsNoExt": documentsNoExt 
     }; 
     this.authHttp.post("/api/email", JSON.stringify(emailInfo), this.options).subscribe(
      res => { 
       this.sendInfoMsg("Succesfully sent E-mails.", "success"); 
       this.progress = 2; 
      }, 
      err => this.sendInfoMsg(err._body, "danger") 
     ); 
    } 

私はそれを引き起こしているかを見ることができないとして、私は二度、応答を送信した任意のアイデア。

+0

ああ撃ちます!それはtransporter.sendMailがループしているからです!ああ... * facepalm * –

答えて

0

ループ内で複数の応答を送信しているため、このエラーが発生しています。

Instead of res.send() you should use res.write() to send multiple responses.


res.send() sends entire HTTP response to the client includes headers and content even it ends the response . And after that, you can't send anything.

関連する問題