Запрос Post не достигает узла из Angular

#javascript #node.js #angular #typescript

#javascript #node.js #angular #typescript

Вопрос:

Я запускаю эту функцию под названием upload (), нажав на кнопку отправки во внешнем интерфейсе.

в моем app.html:

 <div class="row" style="padding:10px;">
        <button type="submit" class="btn btn-primary" style="margin-left:10px;" (click)="upload()">Submit</button>
    </div>
  

в моем app.ts:

 upload() {

    this.files = {
      pdf_one: './server/test-pdfs/pdf-sample.pdf',
      pdf_two:  './server/test-pdfs/pdf-sample.pdf',
    };

    this.filesToUpload = [];

    this.filesToUpload.push(this.files.pdf_one);
    this.filesToUpload.push(this.files.pdf_two);

    this.getMergedPDF(this.filesToUpload);
}

getMergedPDF(filesToUpload): Observable<string> {
        return this.http.post<string>('http://localhost:8081/merge-pdf', JSON.stringify(filesToUpload));
 }
  

Я установил точки останова, и функция, описанная выше, вызывается просто отлично. Это просто, когда он попадает в node.js кроме того, ничего не запускается.

Вот как я устанавливаю конечную точку api на стороне nodejs: server.js

 app.post('/merge-pdf', (req, res) => {
    this.fileList  = req;

    PDFMerge(this.fileList, {output: `${__dirname}/test-pdfs/merged-pdf.pdf`});
    res.send(200);
});

const server = app.listen(8081, () => {
    console.log('Listening on port %s...', server.address().port);
});
  

Мне было интересно, что я мог делать неправильно выше, что конечная точка api не запускается?

Редактировать:

Я пробовал это:

 getMergedPDF(filesToUpload): Observable<string> {
    return this.http.post<string>('http://localhost:8081/merge-pdf', JSON.stringify(filesToUpload))
    .subscribe(data  => this.mergedUrl = data);
  }
  

Но возникает эта ошибка:

 Type 'Subscription' is not assignable to type 'Observable<string>'.
  Property '_isScalar' is missing in type 'Subscription'.'
  

Комментарии:

1. Похоже, что вы на самом деле не подписываетесь на Observable возвращаемый getMergedPDF() , что означает, что запрос POST никогда не будет выполнен.

2. удалите этот наблюдаемый возвращаемый тип<string> из РЕДАКТИРОВАНИЯ, потому что вместо этого вы возвращаете подписку

3. @WilhelmOlejnik большое вам спасибо. В этом и была проблема!

Ответ №1:

Вам нужно подписаться на него. Наблюдаемые объекты являются ленивыми и фактически не будут выполнять вызов POST, если вы не подпишетесь на него.

 this.http.post(...).subscribe(...)
  

Вы можете убедиться, что узел не неисправен, проверив вкладку Сети вашего браузера и увидев, что HTTP-вызов вообще не выполняется.

Комментарии:

1. Хорошо, я пытаюсь это: getMergedPDF(filesToUpload): Observable<строка> { верните this.http.post<строка>(‘ localhost:8081/merge-pdf ‘, JSON.stringify(filesToUpload)) .subscribe(this.mergedUrl => данные); } Но затем я получаю эту ошибку: ‘Аргумент типа ‘string’ не может быть присвоен параметру типа ‘(значение: строка) => void ‘.’

2. Нет, .subscribe(data => this.mergedUrl = data) , но это другая проблема. Выполняется ли сейчас HTTP-вызов? Если да, то этот вопрос решен

3. можете ли вы проверить мою правку выше? Я все еще получаю ошибку при использовании .subscribe

4. Я получаю: ‘Свойство ‘map’ не существует для типа ‘Observable<string>’.’

5. Тогда я не знаю. Я всегда использую .post(...).subscribe( data => ...... ) , и это работает во всех моих проектах.