Я хочу проанализировать адресный запрос и вернуть адреса и их названия, так что http://localhost:3000/I/want/title/?address=google.com&address=youtube.com вернет: google.com - "google", youtube.com - "youtube"
IЯ использую cheerio.js для извлечения заголовка из URL-адресов, но требуется время, и строка res.render выполняется до того, как переменные заголовки заполняются заголовками URL-адресов.Как мне убедиться, что мой код для получения заголовков выполнен до res.render?
На данный момент я не получаю никаких ошибок, но массив title [] отправляется без данных в мой.EJS файл.Я пытался решить эту проблему с помощью обратных вызовов, step.js, async.js, но, похоже, ничего не работает.Я попытался решить его с помощью rsvp.js (обещание), как показано ниже (из app.js), но он тоже не работает, а title [] остается пустым:
app.get("/I/want/title/", function(req,res){
if (typeof req.query.address === "string"){
query = [req.query.address];
}
else {
query = req.query.address;
}
var titles=[];
var promise = new RSVP.Promise(function(resolve, reject) {
for (i=0;i<(query.length);i++){
if (!((query[i]).startsWith("https://www."))){
var url = "https://www." + query[i];
}else{
url=query[i];
}
request(url, function (err, resp, body) {
if (err) {
var title = "NO RESPONSE"
} else {
var $ = cheerio.load(body);
var title = $("title").text();
}
titles.push(title);
});
}
resolve(titles);
reject();
});
promise.then(function(titles) {
res.render("title", {url: query, siteName: titles});
}).catch(function() {
console.log("oh no");
});
});
Что-то не так смой синтаксис или логика?Как мне выполнить это с обратными вызовами или обещаниями?