获取响应时发生错误,如果nodejs服务器在某些延迟后发送响应

时间:2018-08-14 15:02:03

标签: javascript node.js angular typescript express

我正在尝试上传图像,然后nodeJS服务器将该图像文件夹的路径发送回作为响应。

但是当我在执行某些任务后发送响应时,在角度侧什么也没发生。

这是我的component.ts文件。

uploadImage() {
    const formData = new FormData();
    formData.append('photo', this.image);
    const obj$ = this.userService.uploadData(formData); 
    obj$.subscribe(data => {
      console.log(data);   //// nothing happening.
      if (data.success) {
        this.uploadForm.patchValue({
          document: data.url
        });
      }
    });
  }

和我的service.ts

uploadData (uploadImage) {
   return this.http.post<UploadPhoto>('/user/upload', uploadImage);
  }

和我的app.js

router.post('/upload' ,upload.single('photo'), (req,res) => {

  console.log(req.file);
  const body = req.file;

  cloudinary.uploader.upload(body.path, (err, result) => {
    if (err) {
      console.log(err);
      return;
    }
    console.log(result);
    res.status(200).json({
      url: result.url,
      success: true
    });
  });
});

但是当我不执行任何任务而发送响应时,它的工作原理就像

router.post('/upload' ,upload.single('photo'), (req,res) => {

  console.log(req.file);
  const body = req.file;

  res.status(200).json({
       url: 'hello',
       success: true
  })

});

我不知道为什么会这样。

请有人帮助我。

1 个答案:

答案 0 :(得分:1)

当您的上传器中发生错误时,您会将错误返回到控制台,然后结束执行。如果异步方法中有错误,则必须将其传递给next()函数,以便express可以处理它。

router.post('/upload' ,upload.single('photo'), (req,res, next) => {

  console.log(req.file);
  const body = req.file;

  cloudinary.uploader.upload(body.path, (err, result) => {
    if (err) {
      console.log(err);
      next(err);
    }
    else {
      console.log(result);
      res.status(200).json({ url: result.url, success: true });
    }
  });
});