我在Node + Express中有这样一个api调用处理程序。
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调用得到以下响应:-
{"posts":[]}也就是说,返回一个空白响应。但是,在任何地方都不会出现错误,我的节点服务器也不会因为一些错误而中断。它运行平稳,但没有返回响应,尽管数据库中的两个集合中都有足够的文档。所以这不是数据库为空的问题。
我不知道该怎么办。任何和所有的帮助都会受到极大的感谢。
发布于 2022-11-02 07:51:52
forEach不适合与async await一起使用,请尝试使用以下逻辑:
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',
});
}
});https://stackoverflow.com/questions/74285183
复制相似问题