Node.js - Slim to Express

 
Vista:

Slim to Express

Publicado por mak00 (4 intervenciones) el 01/11/2018 17:28:00
Buenas,

Tengo que pasar un código del framework Slim (PHP) al framework Express. La salida debería ser la misma.
Alguien me puede echar una mano?

Codigi en SLIM:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$app->get('/users', function() use($app, $db_postgres){
 
  $sql = "SELECT * FROM tbl_users WHERE type='USER' ORDER BY name";
  $rs = pg_query( $db_postgres, $sql );
 
  $users = array();
 
      while($user = pg_fetch_object($rs)){
          $users[] = $user;
      };
 
  $result = array(
      'status'  => 'success',
      'code'    => 200,
      'data'    => $users
  );
 
  echo json_encode($result);
 
});

Ahora lo tengo así en Express:

1
2
3
4
5
6
7
8
9
10
router.get('/users', (req, res) => {
    client_pg.connect()
    client_pg.query("SELECT * FROM tbl_users WHERE type='USER' ORDER BY name", (err, rows, fields) => {
    if(!err) {
      res.json(rows);
    } else {
      console.log(err);
    }
  });
});

pero necesito que la salida sea la del otro código.

Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 2
Ha disminuido su posición en 2 puestos en Node.js (en relación al último mes)
Gráfica de Node.js

Slim to Express

Publicado por Yamil Bracho (6 intervenciones) el 01/11/2018 17:37:41
Solo genera el correspondiente objeto JSOn (que corresponde al array de PHP

1
2
3
4
5
if (!err) {
  var result = { Status : 'Sucess", Code: 200, Data : rows }
  res.json(result);
}
...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip
Val: 12
Ha mantenido su posición en Node.js (en relación al último mes)
Gráfica de Node.js

Slim to Express

Publicado por kip (5 intervenciones) el 01/11/2018 17:42:18
Creo que esto es lo que deberías hacer:

1
2
3
4
5
res.json({
    status: 'success',
    code: 200,
    data: rows
})
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Slim to Express

Publicado por mak00 (4 intervenciones) el 02/11/2018 12:42:18
Gracias por contestar a los dos.

Ahora me lanza este error:

ERROR Error: Cannot find a differ supporting object '[object Object]' of type 'object'. NgFor only supports binding to Iterables such as Arrays.

Si la salida es la misma que en slim, y no da error, ahora debería funcionar no?

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 2
Ha disminuido su posición en 2 puestos en Node.js (en relación al último mes)
Gráfica de Node.js

Slim to Express

Publicado por Yamil Bracho (6 intervenciones) el 02/11/2018 14:15:39
Revisa el objeto que estas usando para el NgFor. Deberia ser el data (dond evienen los rows del SELECT) de la respuesta que recibes.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip
Val: 12
Ha mantenido su posición en Node.js (en relación al último mes)
Gráfica de Node.js

Slim to Express

Publicado por kip (5 intervenciones) el 02/11/2018 16:28:45
Tienes que acceder al key 'data' que contiene el iterable de tus datos:

1
*ngFor="let row of response.data"

response es el objeto que obtienes a partir del request al endpoint '/users'
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Slim to Express

Publicado por mak00 (4 intervenciones) el 04/11/2018 14:52:41
No hay manera, estoy empezando con Node y angular...

Antes entiendo que le pasaba un array llamado users, y ahora no. Con lo cual si en la vista cambio users por rows, no devuelve nada.

Os pongo como lo tengo haber donde lo hago mal.

user.service.ts:

1
2
3
getUsers(){
        return this._http.get(this.url + 'users').map(res => res.json());
    }

user-list.component.ts:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
@Component({
    selector: 'user-list',
    templateUrl: '../views/users-list.html',
    providers: [UserService]
})
export class UserListComponent {
    public titulo: string;
    public users: User [];
 
    constructor(
        private _route: ActivatedRoute,
        private _router: Router,
        private _userService: UserService
    ) {
        this.titulo = 'User List';
    }
 
    ngOnInit() {
        console.log('Load user-rms-list.component.ts successfully');
 
        this._userService.getUsers().subscribe(
            result => {
                if (result.code !== 200) {
                    console.log(result);
                }else{
                    this.users = result.data;
                }
            },
            error => {
                console.log(<any>error);
            }
        );
    }

users-list.html:

[code]
<h3>{{ titulo }}</h3>
<hr>

<div *ngIf="!users">
Load User list...
</div>
<div *ngIf="users">
<div class="row">
<!-- <div *ngFor="let user of users" class="col-lg-3"> -->
<div *ngFor="let user of users" class="col-lg-3">
<strong>{{ user.name }}</strong>
<p *ngIf="user._name">
<small>{{ user._name }}</small>
</p>
<p *ngIf="!user._name">
<small>No user name</small>
</p>
</div>
</div>
</div>
[/code

Gracias.]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Slim to Express

Publicado por mak00 (4 intervenciones) el 04/11/2018 15:31:10
Ya esta!

Ya he dado con el problema, parece que hoy andaba mas lúcido...

Gracias a los dos, seguro que sin vuestras respuestas hubiera tardado mas en darme cuenta.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar