首页 > 解决方案 > 一次向 api 发出多个请求并将结果显示给模板视图引擎

问题描述

我刚开始学习 API。我偶然发现了这个问题。我的目标:我想同时对 Marvel API 进行两次单独的调用。第一次调用将获取有关字符及其 id 的所有数据,然后我将它们捆绑在一个变量中并将其保存在数据库中。现在,第二次调用将获取所有漫画数据,这些数据将嵌入到第一次调用期间创建的角色对象中。现在我有了这个完整的字符变量。然后我可以将它发送到视图引擎。但我不知道该怎么做。有没有更简单的方法来解决这个问题??你们能不能让我知道我在这里做错了什么......

//Mongoose model set up for Thumbnail > path, and extension
var Schema = mongoose.Schema;
var thumbnailSchema = new Schema({
    path: "String",
    extension: "String"
});
var thumbnailPath = mongoose.model('thumbnailPath', thumbnailSchema);


//Mongoose model set up for Comics
var Schema = mongoose.Schema;
var comicsSchema = new Schema({
    title: "String",
    imagePath: [thumbnailSchema]
});
var Comics = mongoose.model('Comics', comicsSchema);

//Mongoose model set up for Character
var Schema = mongoose.Schema;
var characterSchema = new Schema({
    id: "Number",
    name: "String",
    description: "String",
    imagePath: [thumbnailSchema],
    comicsPath: [comicsSchema]
});
var Character = mongoose.model('Character', characterSchema);

 //Create POST 
app.post('/', function(request,response){
var characterData = request.body.character;
var url = "https://gateway.marvel.com/v1/public/characters?name=" + characterData + "&ts=thor&apikey=PRIVATe"
    Request(url,function(error,res,body){
            var apiData = JSON.parse(body)
            if(!error && res.statusCode == 200){
            var newCharacter = Character ({
                id: apiData.data.results[0].id,
                name: apiData.data.results[0].name,
                description: apiData.data.results[0].description
            });
                newCharacter.imagePath.push({
                path: apiData.data.results[0].thumbnail.path,
                extension:                          apiData.data.results[0].thumbnail.extension
            });
        } else {
            var characterID = newCharacter.id
            var comicsURL = "https://gateway.marvel.com/v1/public/characters/" + characterID + "/comics?limit=5&ts=thor&apikey=PRIVATE";
            Request(comicsURL,function(error,res,body){
                if(!error && res.statusCode == 200){
                    var comicsData = JSON.parse(body)
                    var newComics =  Comics({
                        title: comicsData.data.results[0].title,
                    });
                        newComics.imagePath.push({
                        path: comicsData.data.results[0].thumbnail.path,
                        extension:comicsData.data.results[0].extension
                    });
                        newCharacter.imagePath.push({newComics})
                        console.log(newComics);
                }
            })
        }
    })
});

标签: javascriptnode.jsapirequest

解决方案


每个人......我设法通过使用请求承诺 https://github.com/request/request-promise库来解决这个问题。现在,与从 API 中搜索到的角色以及漫画前面一起。我可以将其保存到变量中,然后将其带到数据库中进行存储;这是在后台发生的。完成后,我们希望可以成功地将其传递(将会看到)到模板引擎进行查看。供以后参考...... 代码 code2


推荐阅读