获取 Promise 数据并将其存储到要发送给 EJS 模板的变量中
Get Promise Data and store it to a variable to be sent for EJS template
最终任务:在 EJS 模板上显示 api 个搜索结果。
过程:使用请求和承诺,我有关于我的搜索承诺的数据api调用数据。
问题:如何将“Promise”的字符串数据传递到我的 EJS 模板中?
- Promise 只允许我通过
'search-api-results-received.then(result_i_need=>console.log(result_i_need)'。我可以看到它已打印出来,但我需要它在变量上将其传递给模板。
我试过 (result_i_need => temp_var_defined_outside = result_i_need) 不走运!
真的很挣扎,扯着我的头发。任何帮助表示赞赏。谢谢
var params = {
method: "POST",
uri: `http://api.somewebsite.com/content/search/v1?apiKey=${
process.env.API_KEY
}`,
body: JSON.stringify({
queryString: req.query.find,
}),
};
const rp = require("request-promise");
call_search_api = rp(params)
.then(a => (call_search_api = a))
.catch(er => console.log("err" + er));
// const call_search_api = searchlib(params,postData).then(a=>console.log(a));
var result = call_search_api.resolve(call_search_api);
res.render('search', {apidata: call_search_api});
EJS 模板内部
<% var total_pages = apidata.results.length; %>
既然您使用的是 Express,那么好消息是这并不难。 Express 并不真正关心你在哪里调用 res.render()
,只要你调用它...所以把它放在 API .then()
函数中:
const rp = require("request-promise");
app.get("/something", (req, res) => {
const params = {
method: "POST",
uri: `http://api.somewebsite.com/content/search/v1?apiKey=${
process.env.API_KEY
}`,
body: JSON.stringify({
queryString: req.query.find,
}),
};
rp(params)
.then(apidata => {
res.render("search", { apidata });
res.end();
})
.catch(er => {
console.log("err" + er);
res.end(); // TODO: better error handling
});
});
更好的是,如果您可以使用 async
函数:
const rp = require("request-promise");
app.get("/something", async (req, res) => {
const params = {/* ... as above ... */};
const apidata = await rp(params);
res.render("search", { apidata });
// TODO: missing error handling
});
最终任务:在 EJS 模板上显示 api 个搜索结果。
过程:使用请求和承诺,我有关于我的搜索承诺的数据api调用数据。
问题:如何将“Promise”的字符串数据传递到我的 EJS 模板中?
- Promise 只允许我通过 'search-api-results-received.then(result_i_need=>console.log(result_i_need)'。我可以看到它已打印出来,但我需要它在变量上将其传递给模板。
我试过 (result_i_need => temp_var_defined_outside = result_i_need) 不走运!
真的很挣扎,扯着我的头发。任何帮助表示赞赏。谢谢
var params = {
method: "POST",
uri: `http://api.somewebsite.com/content/search/v1?apiKey=${
process.env.API_KEY
}`,
body: JSON.stringify({
queryString: req.query.find,
}),
};
const rp = require("request-promise");
call_search_api = rp(params)
.then(a => (call_search_api = a))
.catch(er => console.log("err" + er));
// const call_search_api = searchlib(params,postData).then(a=>console.log(a));
var result = call_search_api.resolve(call_search_api);
res.render('search', {apidata: call_search_api});
EJS 模板内部
<% var total_pages = apidata.results.length; %>
既然您使用的是 Express,那么好消息是这并不难。 Express 并不真正关心你在哪里调用 res.render()
,只要你调用它...所以把它放在 API .then()
函数中:
const rp = require("request-promise");
app.get("/something", (req, res) => {
const params = {
method: "POST",
uri: `http://api.somewebsite.com/content/search/v1?apiKey=${
process.env.API_KEY
}`,
body: JSON.stringify({
queryString: req.query.find,
}),
};
rp(params)
.then(apidata => {
res.render("search", { apidata });
res.end();
})
.catch(er => {
console.log("err" + er);
res.end(); // TODO: better error handling
});
});
更好的是,如果您可以使用 async
函数:
const rp = require("request-promise");
app.get("/something", async (req, res) => {
const params = {/* ... as above ... */};
const apidata = await rp(params);
res.render("search", { apidata });
// TODO: missing error handling
});