Использование HttpService для экспорта в формате CSV: неожиданный токен N в JSON - PullRequest
0 голосов
/ 11 июня 2019

В настоящее время я пытаюсь экспортировать csv, используя nodejs в качестве внутреннего и углового в качестве внешнего интерфейса.

Я знаю, что ошибка «Неожиданный токен N в JSON» означает, что произошла ошибка синтаксического анализа JSON.Это означает, что мне нужно изменить {responseType: "blob" на "json"}.Но есть проблема, потому что я не могу включить их в параметры httpServices, потому что он принимает только HttpParams в качестве параметров

Так что в отношении этого я пробовал эти

1) return this.httpService.get(`/chatbots/get/${id}/download`, {responseType: 'text'}), который возвращаетошибка, так как httpService принимает только HttpParams в качестве параметров

2) Измените HttpServices с @ core / services на HttpClient, но это не сработало, поскольку у меня есть другой вызов API внутри текущего вызова API, который использует HTTPServices.

3) Измените его на метод post, где я могу прикрепить {responseType: "blob" как "json"}, но он не сработал и в любом случае он должен работать как get?

В настоящее время на выходе уже отображается текст в формате csv.

router.get('/get/:id/download', passport.authenticate('jwt', {
  session: false
}), (req, res, next) => {
   ..... 
   console.log(output) 
   res.attachment('test.csv')
   res.send(output)
}

В службах:

import { HttpService } from '../../@core/services';
constructor(
      private httpService: HttpService, ) {}
...
 downloadCSV(id: string) {
      return this.httpService.get(`/xxxx/get/${id}/download`)
   }

в компоненте

  export() {
    if (this.id) {
      this.chatbotService.downloadChatbot(this.id)
      .subscribe((data: any) => {
        const blob = new Blob([data], { type: 'text/csv' });
        const fileName = `${this.id}-test.csv`;
        saveAs(blob, fileName);
    })
    }
  }

Даже еслистатус 200, он говорит

SyntaxError: неожиданный токен N в JSON в позиции 0 в JSON.parse () в XMLHttpRequest.onLoad (http://localhost:8080/vendor.js:22263:51) в ....

1 Ответ

1 голос
/ 11 июня 2019

По умолчанию запрос, выполненный с помощью HttpClient, считается ответом JSON.
Чтобы получить CSV, вы можете принудительно ввести текстовый ответ с помощью

downloadCSV(id: string) {
  return this.httpService.get(`/xxxx/get/${id}/download`, {responseType: 'text'});
}

Вы также можете прочитать эту частьдокументация: https://angular.io/api/common/http/HttpRequest#responseType

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...