SyntaxError: Unexpected token - JSON.parse (<anonymous>) 位置 0 处的 JSON

发布时间:2021-02-25 06:37
Backend code 

router.route('http://localhost:5007/api/media')
  .post(mediaCtrl.saveMedia)

async saveMedia(req, res) {
    let file = req.files.file
    let ext = req.body.extension
    let path = req.body.path

    if(_.isNull(file) || _.isEmpty(file)){
      return res.status(400).json({
        success:false,
        response: null,
        message: "El file vacio"
      })
    }
    if(_.isNull(ext) || _.isEmpty(ext)){
      return res.status(400).json({
        success:false,
        response: null,
        message: "El campo extension esta vacio"
      })
    }
    if(_.isNull(path) || _.isEmpty(path)){
      return res.status(400).json({
        success:false,
        response: null,
        message: "El campo patch esta vacio"
      })
    }
        let fr = new FileReader()
    fr.onload = () => {
      let fileName = moment().unix().toString() + '_' + file.originalFilename
    console.log(fr.result);
    let params = {
      Bucket: config.s3.bucket,
      Body: fr.result,
      //ContentEncoding: 'base64',
      Key: path + "/" +  fileName,
      ContentType: file.type,
      ACL: 'public-read'
    }

    s3bucket.putObject(params, async (err, data) => {
      if(err) {
        return res.json({ success: false, response: err })
      }
      var url = "https://" + config.s3.bucket + ".s3.amazonaws.com/" + params.Key
    
      console.log('25131',data)

      if(data) {
        data["url"] = await url
      }

      return res.json({
        success  : true,
        response : data
      })
    })
    }
    fr.onerror = () => {
      console.log('read error')
    }
    fr.readAsArrayBuffer(file)
  },


Frontend code

  private saveAws() {
    const steps: Array<any> = this.structSaveApp.steps;
    if (steps[this.step_save] != undefined) {
      const options: Array<any> = steps[this.step_save].options;
      this.file_list.forEach((file) => {
        options.forEach((item) => {
          if (file.key === item.key) {
            const file_multimedia: File = file.file;
            const multimedia: FormData = new FormData();
            multimedia.append('file', file_multimedia);
            multimedia.append('extension', file_multimedia.type);
            multimedia.append('path', this.user_id);
            this.spinner.show();
            // var object = {};
            // multimedia.forEach((value, key) => object[key] = value);
            // var json:any = JSON.stringify(object);
            // console.log('saveAWS file',object);
            this.appsService.saveAWS(multimedia).subscribe((response) => {
              console.log(response);
              item.value = response.response.url; 
              this.spinner.hide();
            }, (error) => {
              console.log(error);
              this.spinner.hide();
            });
          }
        });
      });
    }
  }

service

  public saveAWS(data: FormData): Observable<any> {
    let headers = new HttpHeaders({
    });

    return this.http.post('http://localhost:5007/api/media', data, { headers: headers });
  }

当我尝试从前端上传到后端时,它给了我一个错误,如意外令牌 - 在 JSON.parse () 的位置 0 处出错 你能请任何人帮助我吗...................................... ....................

error:SyntaxError: Unexpected token - JSON 中的位置 0 在 JSON.parse() 在 createStrictSyntaxError (C:\Users\THIPPESH_PANI\Downloads\QudraforceBackend\backend\socialtools-api-media\src\node_modules\body-parser\lib\types\json.js:158:10) 在解析 (C:\Users\THIPPESH_PANI\Downloads\QudraforceBackend\backend\socialtools-api-media\src\node_modules\body-parser\lib\types\json.js:83:15) 在 C:\Users\THIPPESH_PANI\Downloads\QudraforceBackend\backend\socialtools-api-media\src\node_modules\body-parser\lib\read.js:121:18 在 invokeCallback (C:\Users\THIPPESH_PANI\Downloads\QudraforceBackend\backend\socialtools-api-media\src\node_modules\raw-body\index.js:224:16) 完成后 (C:\Users\THIPPESH_PANI\Downloads\QudraforceBackend\backend\socialtools-api-media\src\node_modules\raw-body\index.js:213:7) 在 IncomingMessage.onEnd (C:\Users\THIPPESH_PANI\Downloads\QudraforceBackend\backend\socialtools-api-media\src\node_modules\raw-body\index.js:273:7) 在 IncomingMessage.emit (events.js:327:22) 在 IncomingMessage.EventEmitter.emit (domain.js:483:12) 在 endReadableNT (_stream_readable.js:1220:12) 在 processTicksAndRejections (internal/process/task_queues.js:84:21)

回答1
private saveAws() {
    const steps: Array<any> = this.structSaveApp.steps;
    if (steps[this.step_save] != undefined) {
      const options: Array<any> = steps[this.step_save].options;
      this.file_list.forEach((file) => {
        options.forEach((item) => {
          if (file.key === item.key) {
            const file_multimedia: File = file.file;
            const multimedia: FormData = new FormData();
            multimedia.append('file', file_multimedia);
            multimedia.append('extension', file_multimedia.type);
            multimedia.append('path', this.user_id);
            this.spinner.show();
            // this.appsService.saveAWS(multimedia).subscribe((response) => {
            //   console.log(response);
            //   item.value = response.response.url; 
            //   this.spinner.hide();
            // }, (error) => {
            //   console.log(error);
            //   this.spinner.hide();
            // });
            let url = environment.API_BASE.CORE_MEDIA
            let req =new Request(url,{
              body:multimedia,
              method:'POST'
            });
            fetch(req)
            .then((response) =>response.json())
            .then((response) =>{
              item.value = response.response.url,
              this.spinner.hide();
            })
            .catch((error)=>{
              console.log(error);
              this.spinner.hide();
            })
  
          }
        });
      });
    }
  }

实际上我向后端发送了无效的 json 数据,因此在解析 json 时出现错误。现在我已经使用 fetch 和 post 方法解决了我的问题