发布数据时收到一个空数组

huangapple go评论126阅读模式
英文:

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)=&gt;{
    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:

{
    &quot;CategoryName&quot;: &quot;Category 1&quot;,
    &quot;Episodes&quot;: [
        {
            &quot;EpisodeNo&quot;: 1,
            &quot;EpisodeName&quot;: &quot;name 1&quot;,
            &quot;EpisodeDescription&quot;: &quot;description 1&quot;            
        },
        {
            &quot;EpisodeNo&quot;: 2,
            &quot;EpisodeName&quot;: &quot;name 2&quot;,
            &quot;EpisodeDescription&quot;: &quot;description 2&quot;            
        }
    ]
}

And arrange the code like this:

const Create = async (req, res) =&gt; {
    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.

huangapple
  • 本文由 发表于 2023年5月28日 14:17:53
  • 转载请务必保留本文链接:https://go.coder-hub.com/76350194.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定