代码之家  ›  专栏  ›  技术社区  ›  Omkar Dixit

Nodejs multer angular file upload error发送头后无法设置头

  •  0
  • Omkar Dixit  · 技术社区  · 6 年前

    使用角度5节点和Multer 我正在尝试上载文件,因此首先我尝试将文件获取到某个目录,然后必须将该路径插入数据库, 所以首先我创建了表单

    <input type="file" (change)="onFileSelected($event)">
    <button type="button" (click)="onUpload()">Upload</button>
    

    在那之后,我在我的。ts文件

    onFileSelected(event){
       this.selectedFile = event.target.files[0];
      }
    
    onUpload(){
        var fd = new FormData();
        fd.append('productImage',  this.selectedFile, this.selectedFile.name);
        this.httpClient.post('http://localhost:3000/uploadImage/1', fd )
        .subscribe(res => {
          console.log(res);
        });
      }
    

    我的节点rest调用如下

    app.post('/uploadImage/:id', upload.single("productImage")  ,(request, result) => {
        result.send(request.file);
        result.send(request.params.id);
        result.send("Done");
    });
    

    我感到困惑的部分是,因为我正在节点端设置标头,如何将其从前端删除,以避免出现以下错误,即发送标头时无法设置标头

    Error: Can't set headers after they are sent.
        at validateHeader (_http_outgoing.js:494:11)
        at ServerResponse.setHeader (_http_outgoing.js:501:3)
        at ServerResponse.header (D:\Projects\Craiglist\api\node_modules\express\lib\response.js:767:10)
        at ServerResponse.contentType (D:\Projects\Craiglist\api\node_modules\express\lib\response.js:595:15)
        at ServerResponse.send (D:\Projects\Craiglist\api\node_modules\express\lib\response.js:145:14)
        at app.post (D:\Projects\Craiglist\api\index.js:41:12)
        at Layer.handle [as handle_request] (D:\Projects\Craiglist\api\node_modules\express\lib\router\layer.js:95:5)
        at next (D:\Projects\Craiglist\api\node_modules\express\lib\router\route.js:137:13)
        at Array.<anonymous> (D:\Projects\Craiglist\api\node_modules\multer\lib\make-middleware.js:53:37)
        at listener (D:\Projects\Craiglist\api\node_modules\on-finished\index.js:169:15)
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   amiraliamhh    6 年前

    你可以使用result。在每个路由中只发送一次函数。 您的代码应该如下所示:

     app.post('/uploadImage/:id', upload.single("productImage")  ,(request, result) => {
        finalResult = {
        requestFile: request.file,  
        requestParams: request.params.id,
        message: "Done!"
        };
        result.send(finalResult);
    });