Как отобразить результат от асинхронной функции в Node.js - PullRequest
0 голосов
/ 23 ноября 2018

Я новичок в Node, и я смотрел некоторые учебники из Сети.Моя главная проблема - как я могу показать результат по маршруту, который я создал.Ну, я получаю правильные данные с помощью консоли, но когда я обращаюсь к ней через браузер, она не показывает данные, закодированные в формате json.

Вот мой product.js:

const express = require('express');
const router = express.Router();
const connection = require('../connection');

router.get('/',(req,res)=>{
    res.send(products());
})

async function products(){
    // console.log(products)
    return await getProducts();
}

function getProducts(){
    return new Promise((resolve,reject) =>{
         connection.query('SELECT brand,description from products limit 100', function (err, rows, fields) {
            if (err) throw err
            resolve(JSON.stringify(rows))
        })
    })
}

module.exports = router;

Вот результат журнала консоли: http://prntscr.com/llxgk2

Вот результат от почтальона: http://prntscr.com/llxgy3

1 Ответ

0 голосов
/ 23 ноября 2018

Вы должны потреблять обещание.В вашем случае, вероятно, с обработчиками then и catch:

router.get('/',(req,res)=>{
    products()
    .then(products => {
        res.json(products);
    })
    .catch(error => {
        // ...send error response...
    });
});

Примечание. Я использовал res.json для отправки ответа.Вы, вероятно, захотите изменить resolve(JSON.stringify(rows)) на resolve(rows) и оставить то, что делать со строками, вызывающей стороне.(res.json заменит вас.)

Вы также можете взглянуть на Koa , который принадлежит тем же людям, что и Express, который обеспечивает первоклассную поддержку функций asyncкак маршруты.

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