Javascript 如何在Node.js中显示异步函数的结果

Javascript 如何在Node.js中显示异步函数的结果,javascript,node.js,express,Javascript,Node.js,Express,我是Node的新手,我从网上看了一些教程。 我的主要问题是如何显示我创建的路线的结果。嗯,我使用控制台获得正确的数据,但当我通过浏览器访问它时,它不会显示json编码的数据 这是我的product.js: const express = require('express'); const router = express.Router(); const connection = require('../connection'); router.get('/',(req,res)=>{

我是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;
以下是控制台日志结果:


以下是邮递员的结果:

您需要使用承诺。在您的情况下,可能使用
然后
捕获
处理程序:

router.get('/',(req,res)=>{
    products()
    .then(products => {
        res.json(products);
    })
    .catch(error => {
        // ...send error response...
    });
});
注意,我曾经发送过回复。您可能希望将
resolve(JSON.stringify(rows))
更改为仅
resolve(rows)
,并将如何处理这些行留给调用者。(
res.json
将为您进行字符串化。)


您还可以看看,它来自于Express的同一个人,它为作为路由的
async
函数提供了一流的支持。

因为您刚刚起步:您缺少
抛出错误
解析(JSON.stringify(rows))
和您的
查询
调用之后。自动分号插入将为您解决这个问题,但您似乎并不是有意依赖ASI(有些人这样做,我不推荐),所以我想我应该提到它。@t.J.Crowder指出,我会一直记住,您的
异步函数产品()
几乎毫无意义,因为它除了转发函数调用之外什么都不做。您可以将该函数编写为
function products(){return getProducts()}
,其行为将是相同的。或者您只需使用
getProducts()