如何发送额外的数据与angular度的表单数据

我发送带有formData附件files/images以及邮件的内容,然后将它们注入到nodemailer中,如果有帮助,我使用multer作为中间件

component.ts

  let fileList: FileList = event.target.files; if(fileList.length > 0) { this.formData = new FormData(); for(let i = 0 ; i < fileList.length; i++){ let file: File = fileList[i]; this.formData.append('uploadFile', file, file.name); } } 

service.ts(这个工作,我可以从节点req.files文件)

  sendData(formData){ let headers = new HttpHeaders(); return this.http.post('http://localhost:3000/mail',formData) } 

service.ts(不工作,需要这样做)

 sendEmail(formData,email){ let data = { data : email , formData : formData} return this.http.post('http://localhost:3000/mail',data) } 

在这种情况下, req.filesreq.body.formData都是未定义的,我尝试将formdata附加到标题,但是我不知道如何追加/获取或者不可能。

Node.js部分

 var storage = multer.diskStorage({ destination : (req,file, callback)=>{ req.body.path = []; callback(null, './storage'); }, filename : (req, file ,callback)=>{ let filename = Date.now() + '-' +file.originalname; req.body.path.push(filename); callback(null, filename); app.post('/mail',upload.any(),nodemailer); 

nodemailer.js

 module.exports = (req,res)={ console.log(req.files); X //Code Irrelevant for this question } 

为此,你必须这样做:

 sendEmail(formData,email){ let headers = new HttpHeaders(); formData.append('email', email); return this.http.post('http://localhost:3000/mail',formData); } 

原因是,你必须将表单作为多部分传递,而你试图以JSON的forms发送数据,所以在你传递完整的东西之前,它将不会收到任何东西。


 sendEmail(formData,email){ let data = { data : email , formData : formData} return this.http.post('http://localhost:3000/mail',data) } 

正如你在你的函数中看到的,你正在发送JSON。