Node.js - Http get 不会在 Postman 或浏览器中显示来自 MongoDb 查询的数据

Posted

技术标签:

【中文标题】Node.js - Http get 不会在 Postman 或浏览器中显示来自 MongoDb 查询的数据【英文标题】:Node.js - Http get will not display data from MongoDb query in Postman or browser 【发布时间】:2020-12-04 14:00:04 【问题描述】:

我正在开发一个使用 MongoDb 数据库的 node.js 后端项目。在我查询数据库并收到数据后,它不会使用 res.send() 在我的浏览器中显示数据。我也试过 res.json()。但是,数据确实显示在我的控制台上,但不会显示在邮递员或我的浏览器中。来自 mongoDB 的查询数据不是 json 还是数组?我做了一点阅读,它指出它是一个指向数据的光标。这些数据不能转换为在浏览器中显示吗?

mycode as well as console and browser display

ProductRouter.js

router.get('/', (req, res) =>

常量产品 = allProducts.plantProducts();

setTimeout(() =>

    if (products === "400") 

        res.status("400").send("Error querying database");

    else

      console.log(products);

      res.status("200").send(products);

    

, 1000);

ProductController.js

异步函数plantProducts()

试试

const products = await getProducts();

return products;

捕捉(错误)

let code = "400";

return code; 

//res.status('400').send(err.message);

植物产品();

//在mongodb中搜索所有产品。

函数 getProducts()

return new Promise((resolve, reject) => 

    const products = Product

    .find()

    resolve(products);

);    

【问题讨论】:

欢迎来到 SO - 请编辑您的问题并包含代码而不是发布图片。 productRoutes.js – 在 ProductController.js 文件中调用 planProducts 方法://获取所有植物产品。 router.get('/', (req, res) => const products = allProducts.plantProducts(); setTimeout(() => if (products === "400") res.status("400" ).send("查询数据库出错"); else console.log(products); res.status("200").send(products); , 1000); 我添加了处理查询的完整代码。在我的 ProductRoute.js 文件中,我调用了 ProductController.js 文件中的 PlantProducts 函数。如果异步函数调用 getProducts 函数并等待它是它的承诺。 【参考方案1】:

问题在于products 产生了一个承诺,它表示'res.json 不会自动等待并转换为 json-response。您需要等待承诺,然后发送响应。比如:

router.get('/', async (req, res) => 
    const products = await allProducts.plantProducts();
    res.json(products);
);

【讨论】:

我在执行查询的函数中这样做。屏幕截图中的代码是我调用该函数时返回的代码。下面是执行查询的实际函数,它有一个等待。再次,它承诺在将数据打印到控制台时得到解决,而不是浏览器。 异步函数 plantProducts() try const products = await getProducts();退货; catch(err) 让代码 = "400";返回码; //res.status('400').send(err.message); 植物产品(); 你是说调用函数和被调用函数都需要等待吗?我目前调用该函数,而被调用的函数是一个异步函数,它使用 promise 调用另一个函数。该承诺返回给调用异步函数并解析。最后这个解析函数将数据返回给原始调用函数。 这是查询 MongoDB 数据库以从产品集合中获取产品的完整代码: 很高兴听到这个消息。请将答案标记为已接受或在您的解决方案中发布您自己的答案并接受该答案。

以上是关于Node.js - Http get 不会在 Postman 或浏览器中显示来自 MongoDb 查询的数据的主要内容,如果未能解决你的问题,请参考以下文章

在 node.js 中的 HTTP GET 中设置 URL 参数的默认值

如何从 Node.js http get 请求中获取数据

带有查询字符串参数的node.js http'get'请求

检测需要很长时间的 node.js http.get 调用

node.js http.get 在向远程站点发出 5 次请求后挂起

Node.js——request/get实现评论功能