node.js multer-req.file未定义

node.js multer-req.file未定义,node.js,angular,file-upload,multer,Node.js,Angular,File Upload,Multer,带有multer中间件的node/express后端服务器无法使用从带有http拦截器的angular7/http客户端上载的多部分/表单数据图像文件 在服务器上发布api,未定义以下代码报告请求文件 Server-node.js/express/multer 使用客户端上载图像文件-Angular 7->component->uploadsrvice(@Angular/common/http)->http拦截器 ```` 日志('req.headers-->',req.headers)

带有multer中间件的node/express后端服务器无法使用从带有http拦截器的angular7/http客户端上载的多部分/表单数据图像文件


在服务器上发布api,未定义以下代码报告请求文件
Server-node.js/express/multer

使用客户端上载图像文件-Angular 7->component->uploadsrvice(@Angular/common/http)->http拦截器
````

日志('req.headers-->',req.headers);报告的

 ````

    { 'accept-language': 'en-US,en;q=0.9',
      'accept-encoding': 'gzip, deflate, br',
      referer: 'http://localhost:4200/upload',
      'sec-fetch-site': 'same-site',
      origin: 'http://localhost:4200',
      'content-type':
      'multipart/form-data; boundary=----WebKitFormBoundaryc8BWedVBAK9DP0Ng', 
      'sec-fetch-mode': 'cors',
      'user-agent':
       'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36',
      accept: 'application/json, text/plain, */*',
      'content-length': '166498',
      connection: 'close',
      host: 'localhost:5000' }

````
log(“req.file”,req.file); 日志(“请求文件”,请求文件)


信息:req.file未定义
信息:请求文件未定义


感谢您提供任何帮助,以解决服务器上无法使用req.file的原因。
这是客户端代码

````

    onSubmit() {
        const formData = new FormData();
        formData.append('name', this.profileForm.get('name').value);
        formData.append('profile', this.profileForm.get('profile').value);

         this.fileUploadService.upload(formData);

      }
    // angular http call service 
    return this.http.post<any>(`${this.apiUrl}`, formData, {
                reportProgress: true,
                observe: 'events'
            }).
                subscribe((event: HttpEvent<any>) => {
                    switch (event.type) {
                        case HttpEventType.Sent:
                            console.log('Request sent!');
                            break;
                        case HttpEventType.ResponseHeader:
                            console.log('Response header received!');
                            break;

                        case HttpEventType.Response:
                            console.log('Http post  Done!', event.body);
                        case HttpEventType.UploadProgress:
                            return this.fileUploadProgress(event);
                        case HttpEventType.Response:
                            return this.apiResponse(event);

                        default:
                            return `File "${formData.get('profile').name}" surprising upload event: ${event.type}.`;

                    }
                });

//http interceptor


    intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

            console.log("http request intercepted by HttpConfigInterceptor"+JSON.stringify(request.headers));
            // lets add the base url first.





            if (request.body instanceof FormData) {
                // we are sending a file here
                console.log("sending a multipart/form-data");

              }
            if (request.url.indexOf('photos/image-upload') == 0) {

                console.log('photos/image-upload true')
                request = request.clone({ url: `${environment.rootUrlIU}/${request.url}` });



            }
            else {
                request = request.clone({ url: `${environment.rootUrl}/${request.url}` });
            }

            return next.handle(request)
                .pipe(
                    map((event: HttpEvent<any>) => {
                        if (event instanceof HttpResponse) {
                            console.log('HttpConfigInterceptor response event--->>>', event);

                        }
                        return event;
                    }),
                    catchError((error: HttpErrorResponse) => {
                        let data = {};
                        data = {
                            reason: error && error.error && error.error.reason ? error.error.reason : '',
                            status: error.status
                        };




                        return throwError(error);
                    }));
        }
````

    enter code here

Any help highly appreciated.. thank you.
````
onSubmit(){
const formData=new formData();
append('name',this.profileForm.get('name').value);
formData.append('profile',this.profileForm.get('profile').value);
这个.fileUploadService.upload(formData);
}
//角度http呼叫服务
返回this.http.post(`this.apirl}`,formData{
报告进展:是的,
观察:“事件”
}).
订阅((事件:HttpEvent)=>{
开关(事件类型){
案例HttpEventType。已发送:
log('Request sent!');
打破
案例HttpEventType.ResponseHeader:
log('Response header received!');
打破
案例HttpEventType。响应:
log('Http post Done!',event.body);
案例HttpEventType.UploadProgress:
返回此.fileUploadProgress(事件);
案例HttpEventType。响应:
返回此.api响应(事件);
违约:
返回`File“${formData.get('profile').name}”意外上载事件:${event.type}.`;
}
});
//http拦截器
拦截(请求:HttpRequest,下一步:HttpHandler):可观察{
log(“HttpConfigInterceptor拦截的http请求”+JSON.stringify(request.headers));
//让我们先添加基本url。
if(FormData的request.body实例){
//我们正在这里发送一个文件
log(“发送多部分/表单数据”);
}
if(request.url.indexOf('photos/image upload')==0){
console.log('photos/image upload true')
request=request.clone({url:`${environment.rootUrlIU}/${request.url}`});
}
否则{
request=request.clone({url:`${environment.rootUrl}/${request.url}}});
}
返回next.handle(请求)
.烟斗(
映射((事件:HttpEvent)=>{
if(HttpResponse的事件实例){
log('HttpConfigInterceptor响应事件-->>>',事件);
}
返回事件;
}),
catchError((错误:HttpErrorResponse)=>{
让数据={};
数据={
原因:error&&error.error&&error.error.reason?error.error.reason:“”,
状态:error.status
};
返回投掷器(错误);
}));
}
````
在这里输入代码
非常感谢您的帮助。。非常感谢。

更改了服务器端multer({storage:mstorage1}).single('image'),值为multer({storage:mstorage1}).single('profiel'),值以便与客户端组件formData.append('profile',this.profileForm.get('profile').value)。然而没有运气,同样的错误。
reports 
````

    onSubmit() {
        const formData = new FormData();
        formData.append('name', this.profileForm.get('name').value);
        formData.append('profile', this.profileForm.get('profile').value);

         this.fileUploadService.upload(formData);

      }
    // angular http call service 
    return this.http.post<any>(`${this.apiUrl}`, formData, {
                reportProgress: true,
                observe: 'events'
            }).
                subscribe((event: HttpEvent<any>) => {
                    switch (event.type) {
                        case HttpEventType.Sent:
                            console.log('Request sent!');
                            break;
                        case HttpEventType.ResponseHeader:
                            console.log('Response header received!');
                            break;

                        case HttpEventType.Response:
                            console.log('Http post  Done!', event.body);
                        case HttpEventType.UploadProgress:
                            return this.fileUploadProgress(event);
                        case HttpEventType.Response:
                            return this.apiResponse(event);

                        default:
                            return `File "${formData.get('profile').name}" surprising upload event: ${event.type}.`;

                    }
                });

//http interceptor


    intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

            console.log("http request intercepted by HttpConfigInterceptor"+JSON.stringify(request.headers));
            // lets add the base url first.





            if (request.body instanceof FormData) {
                // we are sending a file here
                console.log("sending a multipart/form-data");

              }
            if (request.url.indexOf('photos/image-upload') == 0) {

                console.log('photos/image-upload true')
                request = request.clone({ url: `${environment.rootUrlIU}/${request.url}` });



            }
            else {
                request = request.clone({ url: `${environment.rootUrl}/${request.url}` });
            }

            return next.handle(request)
                .pipe(
                    map((event: HttpEvent<any>) => {
                        if (event instanceof HttpResponse) {
                            console.log('HttpConfigInterceptor response event--->>>', event);

                        }
                        return event;
                    }),
                    catchError((error: HttpErrorResponse) => {
                        let data = {};
                        data = {
                            reason: error && error.error && error.error.reason ? error.error.reason : '',
                            status: error.status
                        };




                        return throwError(error);
                    }));
        }
````

    enter code here

Any help highly appreciated.. thank you.