如何发送额外的数据与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.files
和req.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。