Как мне вернуть данные из базы данных? - PullRequest
0 голосов
/ 20 марта 2020

Я не могу подписаться на наблюдаемое, возвращаемое хранимой процедурой на стороне сервера.

Я пытаюсь вызвать хранимую процедуру на контроллере, как это

alerts: async ( req, res, next ) => {
            try{ 
                let id_user = req.params.id
                let res_array = []
                return await Database.knex.raw( 'CALL getAlerts( ? )', [id_user] ).then( response => {
                    response[0][0].map( res => {
                        res_array.push(res)
                    })
                    return  res_array
                 } )

            } catch ( error ) {
                return next( error );
            }
        }

Это называется на компоненте с помощью

this.api.get('alerts/'+ this.auth.user.id).subscribe( (alerts: any)  => {
            console.log("subscribing", alerts)
        })

по маршруту

router.get('/alerts/:id', controller.alerts);

SP возвращает правильные значения, но когда я пытаюсь подписаться для доступа к ним на компоненте, я не вижу консольный журнал, или сделайте что-нибудь с этим наблюдаемым. Почему это? Я прочитал столько, сколько мог на эту тему, но я все еще не могу точно определить проблему. Спасибо всем.

1 Ответ

0 голосов
/ 20 марта 2020

Это не так, как вы возвращаете что-то из Express. js. Вы должны рефакторинг что-то вроде:

alerts: (req, res, next) => {
    const { id } = req.params
    Database.knex.raw('CALL getAlerts( ? )', [id])
        .then(response => response[0][0])
        .then(res.send)
        .then(() => next())
        .catch(next)
}
...