英文:
Getting an empty array while posting an an data
问题
我通过POSTMAN、mongoose和nodejs发布API的数据。我正在构建一个播客API。该API包含类别名称和包含剧集编号、剧集名称、剧集描述和标题图像的剧集数组。在发布数据后,我能够获取类别名称,但剧集数组为空。
以下是API创建的代码:
const Create = async(req,res)=>{
    const CategoryName = req.body.CategoryName
    const EpisodeNo = req.body.EpisodeNo
    const EpisodeName = req.body.EpisodeName
    const EpisodeDescription = req.body.EpisodeDescription
    try{
        if(req.file){
            const file = dataUri(req).content;
            const result = await uploader.upload(file)
            const image = result.url;
            // console.log(image)
            const Podcast = new Podcasts({
                CategoryName:CategoryName,
                EpisodeNo:EpisodeNo,
                EpisodeName:EpisodeName,
                EpisodeDescription:EpisodeDescription,
                imageurl:image
            })
            console.log(imageurl)
            await Podcast.save()
            // console.log(Podcast)
            res.send(Podcast)
        }
    }catch(err){
        res.status(500).json(err)
        console.log(err)
    }
}
API的模式如下:
const PodcastSchema = new mongoose.Schema({
    CategoryName:String,
    Episodes:[
        {
            EpisodeNo:Number,
            EpisodeName:String,
            EpisodeDescription:String,
            imageurl:String
    }
    ]
},
{
    timestamps:true
})
以下是API示例:
{
    "_id": "6472e8d3b36c95432b4758fc",
    "CategoryName": "Music",
    "Episodes": [],
    "createdAt": "2023-05-28T05:38:27.135Z",
    "updatedAt": "2023-05-28T05:38:27.135Z",
    "__v": 0
}
这是POSTMAN请求的截图:
这是有效的代码示例:
const Create = async(req,res)=>{
    const {CategoryName , Episodes} = req.body
    try{
        if(req.file){
            const file = dataUri(req).content;
            const result = await uploader.upload(file)
            const image = result.url;
            // console.log(image)
            const Podcast = new Podcasts({
                CategoryName:CategoryName,
                Episodes:[{
                    EpisodeNo:req.body.EpisodeNo,
                    EpisodeName:req.body.EpisodeName,
                    EpisodeDescription:req.body.EpisodeDescription,
                    imageurl:image
                }]
            })
            // console.log(imageurl)
            const Podcastresult = await Podcast.save()
            // console.log(Podcast)
            res.send(Podcastresult)
        }
    }catch(err){
        res.status(500).json(err)
        console.log(err)
    }
}
我认为问题可能出在req.body上,但我不确定。也许我以错误的方式发布了剧集数组的数据。我想解决剧集数组的问题。
英文:
I am posting the data of the api through POSTMAN and mongoose and nodejs . I am building an API for podcast . And the API contains Category Name and the Episodes array which contains Episode Number , Episode Name , Episode Description and title image. After posting the data I am getting the Category Name but i am getting the Epiosdes Array empty.
Below is the API Create Code
const Create = async(req,res)=>{
    const CategoryName = req.body.CategoryName
    const EpisodeNo = req.body.EpisodeNo
    const EpisodeName = req.body.EpisodeName
    const EpisodeDescription = req.body.EpisodeDescription
    try{
        if(req.file){
            const file = dataUri(req).content;
            const result = await uploader.upload(file)
            const image = result.url;
            // console.log(image)
            const Podcast = new Podcasts({
                CategoryName:CategoryName,
                EpisodeNo:EpisodeNo,
                EpisodeName:EpisodeName,
                EpisodeDescription:EpisodeDescription,
                imageurl:image
            })
            console.log(imageurl)
            await Podcast.save()
            // console.log(Podcast)
            res.send(Podcast)
        }
    }catch(err){
        res.status(500).json(err)
        console.log(err)
    }
}
The Schema for API
const PodcastSchema = new mongoose.Schema({
        CategoryName:String,
        Episodes:[
            {
                EpisodeNo:Number,
                EpisodeName:String,
                EpisodeDescription:String,
                imageurl:String
        }
        ]
    },
    {
        timestamps:true
    })
Below is the API
{
"_id": "6472e8d3b36c95432b4758fc",
"CategoryName": "Music",
"Episodes": [],
"createdAt": "2023-05-28T05:38:27.135Z",
"updatedAt": "2023-05-28T05:38:27.135Z",
"__v": 0
}
This is the POSTMAN request
This is the code which worked
<!-- begin snippet: js hide: false console: true babel: false -->
<!-- language: lang-js -->
const Create = async(req,res)=>{
    const {CategoryName , Episodes} = req.body
    try{
        if(req.file){
            const file = dataUri(req).content;
            const result = await uploader.upload(file)
            const image = result.url;
            // console.log(image)
            const Podcast = new Podcasts({
                CategoryName:CategoryName,
                Episodes:[{
                    EpisodeNo:req.body.EpisodeNo,
                    EpisodeName:req.body.EpisodeName,
                    EpisodeDescription:req.body.EpisodeDescription,
                    imageurl:image
                }]
            })
            // console.log(imageurl)
            const Podcastresult = await Podcast.save()
            // console.log(Podcast)
            res.send(Podcastresult)
        }
    }catch(err){
        res.status(500).json(err)
        console.log(err)
    }
}
<!-- end snippet -->
I think i am getting this problem due to req.body but i am not sure about that . Maybe i am posting the data of Episodes array in a wrong way . I want to solve the problem of the episodes array.
答案1
得分: 0
你需要将剧集作为数组发送到请求体中,格式如下:
{
    "CategoryName": "Category 1",
    "Episodes": [
        {
            "EpisodeNo": 1,
            "EpisodeName": "name 1",
            "EpisodeDescription": "description 1"            
        },
        {
            "EpisodeNo": 2,
            "EpisodeName": "name 2",
            "EpisodeDescription": "description 2"            
        }
    ]
}
并且按照以下方式排列代码:
const Create = async (req, res) => {
    const { CategoryName, Episodes } = req.body;
    try {
        if (req.file) {
            const file = dataUri(req).content;
            const result = await uploader.upload(file);
            const image = result.url;
            const podcast = new Podcast({
                CategoryName,
                Episodes,
            });
            const podcastResult = await podcast.save();
            res.send(podcastResult);
        }
    } catch (err) {
        res.status(500).json(err);
        console.log(err);
    }
};
我没有包含图片,因为不清楚您是否要使用相同的 imageUrl 作为每一集的图片。
英文:
You need to send episodes as array in the request body like this:
{
    "CategoryName": "Category 1",
    "Episodes": [
        {
            "EpisodeNo": 1,
            "EpisodeName": "name 1",
            "EpisodeDescription": "description 1"            
        },
        {
            "EpisodeNo": 2,
            "EpisodeName": "name 2",
            "EpisodeDescription": "description 2"            
        }
    ]
}
And arrange the code like this:
const Create = async (req, res) => {
    const { CategoryName, Episodes } = req.body;
    try {
        if (req.file) {
            const file = dataUri(req).content;
            const result = await uploader.upload(file);
            const image = result.url;
            const podcast = new Podcast({
                CategoryName,
                Episodes,
            });
            const podcastResult = await podcast.save();
            res.send(podcastResult);
        }
    } catch (err) {
        res.status(500).json(err);
        console.log(err);
    }
};
I didn't include the image, because it is not clear whether you want to use the same imageUrl as the per episode.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。



评论