如何使用module.exports导出异步功能

时间:2019-07-30 01:37:37

标签: javascript express async-await

我无法将异步函数的结果返回给我正在调用的路由。我如何成功做到这一点?

我正在尝试从文件token_generator.js导出令牌,并使用Express在路由('/')上显示它。我从其他文件导入功能。

const tokenGenerator = require('./src/token_generator'); 

我有一个简单的方法可以调用该函数输出。

app.get('/', async function (request, response) {
  const identity = request.query.identity || 'identity';
  const room = request.query.room;
  response.send(tokenGenerator(identity, room));
});

在我的token_generator中,我使用async / await来检索和生成令牌。我在导出之前对其进行了登录,并且该日志出现在控制台中,但从未进入该网页。

async function tokenGenerator(identity, room) {

  const token = new AccessToken(
    process.env.TWILIO_ACCOUNT_SID,
    process.env.TWILIO_API_KEY,
    process.env.TWILIO_API_SECRET
  );

  let grant = new VideoGrant();
  token.identity = Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 8);
  grant.room = await getRoomId(room);
  token.addGrant(grant);
  console.log(token.toJwt());
  return await token.toJwt();
}

module.exports = tokenGenerator;

如何获取令牌以显示在网页上?我有一个与此类似的代码的工作版本,但是与我以前的代码相比,我想使用async / await作为更好的实践。我想必须以其他方式调用Express中的函数吗?谢谢

1 个答案:

答案 0 :(得分:0)

app.get('/', async function (request, response) {
  const identity = request.query.identity || 'identity';
  const room = request.query.room;
  // Since your tokenGenerator is async, you need await to get its result
  response.send(await tokenGenerator(identity, room));
});