首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于来自Node + React的嵌套mongodb查询返回为null的响应

对于来自Node + React的嵌套mongodb查询返回为null的响应
EN

Stack Overflow用户
提问于 2022-11-02 06:32:24
回答 1查看 23关注 0票数 0

我在Node + Express中有这样一个api调用处理程序。

代码语言:javascript
复制
const express = require("express");
const router = express.Router();
const PostModel = require("../models/postModel");
const ProfileModel = require("../models/profileModel");
const multer = require("multer");
const fs = require("fs");
const path = require("path");
const uuid = require("uuid");
//please ignore unused dependencies because im using them in other api call handlers
router.post('/get-posts/', (req, res) => {
    const { userId } = req.body;

    PostModel.find((err, postData) => {
        if(err){
            return res.send({
                success: "False",
                message: "Error while getting posts"
            });
        }

        const data = [];
        postData.forEach(async (p, index) => {
            const b64 = Buffer.from(p.post.image.data).toString('base64');
            const mimeType = p.post.image.contentType;
            const url = `data:${mimeType};base64,${b64}`;

            var ddd = await ProfileModel.findOne({
                userId: p.authorId
            }, async (e, d) => {
                if(e){
                    console.log(e);
                }
                
            }).clone();

            let dpMimeType = ddd.profilePic.contentType;
            let dpUrl = `data:${dpMimeType};base64,${b64}`;

            const obj = {
                authorId: p.authorId,
                postId: p.postId,
                dp: dpUrl,
                post: {
                    authorName: p.post.authorName,
                    creationDate: p.post.creationDate,
                    heading: p.post.heading,
                    image: url,
                    message: p.post.message,
                    likes: p.post.likes,
                    dislikes: p.post.dislikes,
                    hearts: p.post.hearts,
                    comments: p.post.comments,
                    likedUsers: p.post.likedUsers,
                    dislikedUsers: p.post.dislikedUsers,
                    heartedUsers: p.post.heartedUsers
                }
            };
    
            data.push(obj);
        });

        if(postData.length > 0){
            return res.status(200).send({
               posts: data 
            });
        } else {
            return res.status(200).send({
                message: "No posts found for this user"
            });
        }
    });
});

现在,我在这里做的是从数据库中获取PostModel中的所有帖子。然后,我遍历每个帖子,然后查询该帖子的authorId,并将其传递给ProfileModel,以获取作者的dp,将其附加到我的响应主体,并将其发送回我的React前端frm,在那里我可以访问同一个帖子并显示作者的dp和作者的帖子。

但是这里发生的问题是,我从api调用得到以下响应:-

代码语言:javascript
复制
{"posts":[]}

也就是说,返回一个空白响应。但是,在任何地方都不会出现错误,我的节点服务器也不会因为一些错误而中断。它运行平稳,但没有返回响应,尽管数据库中的两个集合中都有足够的文档。所以这不是数据库为空的问题。

我不知道该怎么办。任何和所有的帮助都会受到极大的感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-02 07:51:52

forEach不适合与async await一起使用,请尝试使用以下逻辑:

代码语言:javascript
复制
router.post('/get-posts/', async (req, res) => {
  try {
    const { userId } = req.body;

    const postData = await PostModel.find({});
    if (postData.length === 0) {
      return res.status(400).send({
        message: 'No posts found for this user',
      });
    }

    const data = [];
    for (const p of postData) {
      const b64 = Buffer.from(p.post.image.data).toString('base64');
      const mimeType = p.post.image.contentType;
      const url = `data:${mimeType};base64,${b64}`;

      var ddd = await ProfileModel.findOne({
        userId: p.authorId,
      });

      let dpMimeType = ddd.profilePic.contentType;
      let dpUrl = `data:${dpMimeType};base64,${b64}`;

      const obj = {
        authorId: p.authorId,
        postId: p.postId,
        dp: dpUrl,
        post: {
          authorName: p.post.authorName,
          creationDate: p.post.creationDate,
          heading: p.post.heading,
          image: url,
          message: p.post.message,
          likes: p.post.likes,
          dislikes: p.post.dislikes,
          hearts: p.post.hearts,
          comments: p.post.comments,
          likedUsers: p.post.likedUsers,
          dislikedUsers: p.post.dislikedUsers,
          heartedUsers: p.post.heartedUsers,
        },
      };

      data.push(obj);
    }

    return res.status(200).send({
      posts: data,
    });
  } catch (err) {
    res.status(500).send({
      success: 'False',
      message: 'Error while getting posts',
    });
  }
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74285183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档