Проблема разбора NodeJs + Angular 2 CRUD JSON - PullRequest
0 голосов
/ 13 июня 2019

У меня есть бэкэнд NodeJS, который просто делает CRUD. У меня есть этот маршрут, который читает простую таблицу MySQL

app.get('/fb_photo', (req, res) => {
    mysqlConnection.query('SELECT id,photo_date,photo_text from p_fb_photo_search LIMIT 10', (err, rows, fields) => {
        if (!err)
            res.send(rows);
        else
            console.log(err);
    })
});

Если я протестирую в браузере, он выдаст хороший вывод JSON:

[{"id":23101,"photo_date":"2019-04-23T08:59:52.000Z","photo_text":"NO TEXT"},{"id":19614,"photo_date":"2018-10-20T07:46:40.000Z","photo_text":"NO TEXT"},{"id":46245,"photo_date":"2019-05-27T20:29:49.000Z","photo_text":"NO TEXT"}

Теперь в Angular Frontend у меня есть это:

import { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http';

@Component({
    selector: 'app-root',
    templateUrl: './app.component.html',
    styleUrls: ['./app.component.scss']
})
export class AppComponent implements OnInit {
    title = 'app';

    columnDefs = [
        {headerName: 'id', field: 'id', sortable: true, filter: true},
        {headerName: 'photo_date', field: 'photo_date', sortable: true, filter: true},
        {headerName: 'photo_text', field: 'photo_text', sortable: true, filter: true}
    ];

    rowData: any;

    constructor(private http: HttpClient) {

    }

    ngOnInit() {
        this.rowData = this.http.get('http://localhost:3000/fb_photo');
    }
}

но, что удивительно, таблица ag-grid не может загрузить и извлечь запись без каких-либо ошибок: enter image description here

Что-то не так с моим кодом? Если я использую образцы JSON AG, это работает. Thx

EDIT

это мой app.component.html:

<ag-grid-angular 
style="width: 500px; height: 500px;" 
class="ag-theme-balham"
[rowData]="rowData | async"
[columnDefs]="columnDefs">
</ag-grid-angular>

EDIT2

каждый раз, когда я обновляюсь в угловом приложении, серверная часть nodejs успешно опрашивает результаты enter image description here

Я не очень понимаю, почему не работает.

EDIT3

Я изменил серверную часть с помощью этого кода:

// Retrieve all users 
app.get('/users', function (req, res) {
    dbConn.query('SELECT id,photo_date FROM p_fb_photo_search limit 10', function (error, results, fields) {

        if(error){
            res.send(JSON.stringify({"status": 500, "error": error, "response": null})); 
            //If there is error, we send the error in the error section with 500 status
        } else {
            res.setHeader('Content-Type', 'application/json');
            res.end(JSON.stringify(results, null, 3));
            //res.send(JSON.stringify(results));
            //If there is no error, all is good and response is 200OK.
        }

    });
});

Теперь у меня есть правильный JSON в качестве вывода: enter image description here

Ответы [ 2 ]

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

http.get вернет вам наблюдаемое вместо вашего фактического массива предметов.

Поэтому, чтобы фактически отобразить ваши записи в ag-grid, вам нужно будет либо подписаться на вызов http.get, чтобы получить данные, либо, что еще лучше, указать, что rowData является асинхронным вВаш HTML вроде так:

<ag-grid-angular [rowData]="rowData | async"></ag-grid-angular>
1 голос
/ 13 июня 2019

Читайте о наблюдаемых в Angular ... асинхронных ответах.

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