Aplikasi Angular ujung depan mengirimkan GET ke server API Node backend. Sementara API berhasil memenuhi GET ini, responsnya res.status(200).send(data); tidak memicu breakpoint pada pemanggil NG, tetapi tab jaringan Chrome F12 menunjukkan ada data yang dikembalikan.

---- Komponen front-end NG .ts:

import { Component, NgModule, OnInit } from '@angular/core';
import { mySvc } from '../mySvc.service';
import { record } from '../models/record';     

export class ListAllRecordsComponent implements OnInit {
    private allRecords: record[] = [];
    constructor(private mySvc: mySvc) {}
    ...
    public getAllRecords()
    {
      this.mySvc.getAllRecords().subscribe(response => this.allRecords = response, );
    }
}

---- NG mySvc.service.ts

import { record } from '../models/record';  
@Injectable()
export class mySvc {
    constructor(private http: HttpClient) { }
    const url = 'http://localhost:3000/somewhere';
    getAllRecords(): Observable<record[]>
    {
        return this.http.get(url)
            .pipe(
                map((data: any) => data.record),        // ??? break point is not triggered as expected when API sends back 200.
                catchError( error => { return throwError('bad')}) 
            ) 
    }

---- Pengontrol server API simpul:

exports.pgGetAll = (req, res) =>
{
    objPS.pgGetAll( (err, data) =>
    {
        if (err)
            res.status(500).send(err.message);
        else
        {
            res.status(200).send(data);     // break point shows data has all records
        }
    });
}

---- objPS:

const pgGetAll = (cbFunc) => 
{
    pool.query('select * from "schema1"."table1"')
        .then
        (
            good =>
            {
                cbFunc(null, good)          // break point shows good has all records
            },
            bad =>
            {
                cbFunc(bad)
            }
        );
}
0
Jeb50 15 Desember 2020, 00:12

3 jawaban

Jawaban Terbaik

Jika saya tidak salah, Anda mendapatkan kembali data. Jika Anda hanya mendapat masalah dengan breakpoint Anda, coba gunakan metode untuk memetakan data dan atur breakpoint Anda di sana alih-alih mengaturnya di lambda Anda:

map((data: any) => this.mapData(data))

Tentukan metode baru ini:

mapData(data: any) {
  return data.record; // set your breakpoint here
}

Beberapa hal lain meskipun: "data.record" terdengar salah bagi saya, karena apa yang harus memberikan lebih dari satu catatan, tidak hanya satu, jadi nama tunggal setidaknya menarik.

Setidaknya dalam paket mssql, kueri akan mengembalikan objek dalam data yang disebut recordset.

Berikut tautan ke sana: https://www.npmjs.com/package/ mssql#query-command-callback

0
Janos Vinceller 6 Januari 2021, 02:00

Saya pikir masalah Anda berkaitan dengan cara ekspresi lambda Javascript di-debug.

Tolong, pertimbangkan untuk membaca jawaban yang diterima di ini pertanyaan JADI, saya pikir itu akan memberi Anda semua informasi yang diperlukan untuk berhasil men-debug kode Anda.

1
jccampanero 5 Januari 2021, 23:12

Saya pikir ini harus memperbaikinya (kutipan dari layanan Anda):

getAllRecords(): Observable<record[]>
    {
        return this.http.get<record[]>(url)
            .pipe(
                map((data: any) => data.record),      
                catchError( error => { return throwError('bad')}) 
            ) 
    }

Saya mengalami ini sekitar satu juta kali.

0
user14772481user14772481 2 Januari 2021, 11:18