如何以角度形式发送附加数据和表单数据

时间:2017-11-06 07:33:50

标签: javascript node.js angular

我发送带有files/images的附件formData以及邮件的内容,然后将它们注入到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 Part

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
}

1 个答案:

答案 0 :(得分:1)

为此你必须这样做:

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

原因,您必须将表单作为multipart传递,并且您正在尝试   以JSON格式发送数据,因此在您通过之前不会收到任何内容   如上所述。

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

正如您在函数中看到的那样,您正在发送JSON。