获取 Promise 数据并将其存储到要发送给 EJS 模板的变量中

Get Promise Data and store it to a variable to be sent for EJS template

最终任务:在 EJS 模板上显示 api 个搜索结果。

过程:使用请求和承诺,我有关于我的搜索承诺的数据api调用数据。

问题:如何将“Promise”的字符串数据传递到我的 EJS 模板中?

我试过 (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
});