gpt4 book ai didi

javascript - 我可以在一个路由中多次使用 npm request 并将结果显示在同一页面上吗?

转载 作者:行者123 更新时间:2023-11-30 17:20:58 24 4
gpt4 key购买 nike

有没有一种方法可以在一个路由中多次使用 Node 模块“请求”并将结果显示在同一个渲染的 ejs 模板页面上?

目标:我想使用他们的搜索 API 显示来自 iTunes Store 的电子书信息。现在我可以获得一本电子书在一个地区的价格,但我想显示同一本电子书在多个国家/地区的价格。要获得每个不同的价格,我需要使用不同的 URL,可以是默认结尾“&country=gb”、“&country=fr”等。我可以获得我感兴趣的 5 个国家/地区的每个国家/地区的价格,但我可以将它们全部放在同一页上。我如何构建我的路线并准备我的变量,以便我可以在呈现一个页面时显示来自所有这些国家/地区的信息?

我正在使用 node、express 和 ejs,我正在使用“请求” Node 模块发出 http 请求。这是我正在使用的表单的基础知识,我在 searchTerm 字段中输入了 ISBN。 (还有更多,但体积庞大。)

<form action="/search">
<select name="searchTerm">

现在可用于在一个地区获取有关该书的信息的代码:

app.get('/search', function(req, res){
var searchRequest = req.query.searchTerm;
var searchURL = "http://itunes.apple.com/lookup?isbn=" + searchRequest;
request(searchURL, function(error, response, body){
if (!error && response.statusCode == 200) {
var data = JSON.parse(body);
console.log(data.results[0]);
var iTunesResults = data.results[0];
res.render("test", {
iTunesResults: iTunesResults,
searchRequest: searchRequest
});
}
});
});

如果我对此代码进行一些更改,我只需进行一些更改就可以在不同的国家/地区获取有关同一本电子书的信息。下面是适用于英国的代码,它可以独立运行,我只想同时显示这两个搜索的结果,但我不确定从哪里开始。

app.get('/search', function(req, res){
var searchRequest = req.query.searchTerm;
var gbSearchURL = "http://itunes.apple.com/lookup?isbn=" + searchRequest + "&country=gb";
request(gbSearchURL, function(error, response, body){
if (!error && response.statusCode == 200) {
var data = JSON.parse(body);
console.log(data.results[0]);
var iTunesResults = data.results[0];
res.render("test", {
iTunesResults: iTunesResults,
searchRequest: searchRequest
});
}
});
});

我想做的是向 Apple 发出额外的请求,在这里使用相同的搜索词,但在我传递给请求的 searchURL 的末尾添加国家标识符。但是,如果我尝试再次调用请求并将所有结果变量立即传递到 res.render,则第一个请求的结果将不会在第二个请求中可用。(“ReferenceError:iTunesResults 未定义”)

我猜想有一种方法可以得到一组 searchURL 和一组结果 (req.query.searchTerm),然后我可以在呈现 test.ejs 模板时传递该数组或更复杂的对象.每个 app.get 路由仅限于一个 http 请求吗? (如果这很明显,请原谅我,但我只是想获取此定价信息并将其并排显示。另外,我认为最好在我的问题中详细说明。)

最佳答案

好的!我使用“异步” Node 库解决了这个问题。 http://www.github.com/caolan/async

有了它,我可以并行调用多个函数,当它们完成后,我可以将结果传回模板进行渲染。

app.get('/search', function(req, res){
async.parallel([
function(done){
var searchRequest = req.query.searchTerm;
var gbSearchURL = "http://itunes.apple.com/lookup?isbn=" + searchRequest + "&country=us";
request(gbSearchURL, function(error, response, body){
if (!error && response.statusCode == 200) {
// console.log(body)
var data = JSON.parse(body);
// below shows whole object of result 0
console.log(data.results[0]);
done(null, data.results[0]);
}
});
},
// UK pricing
function(done){
var searchRequest = req.query.searchTerm;
var gbSearchURL = "http://itunes.apple.com/lookup?isbn=" + searchRequest + "&country=gb";
request(gbSearchURL, function(error, response, body){
if (!error && response.statusCode == 200) {
// console.log(body)
var data = JSON.parse(body);
// below shows whole object of result 0
console.log(data.results[0]);
done(null, data.results[0]);
}
});
},function(err, iTunesResults){
res.render("test", {
iTunesResults: iTunesResults,
searchRequest: req.query.searchTerm
});
})
});

关于javascript - 我可以在一个路由中多次使用 npm request 并将结果显示在同一页面上吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25132028/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com