如何异步读取带有then-yield的模块的文件

时间:2017-01-31 19:28:06

标签: javascript node.js bluebird

我试图加载一个秘密用于 koa-jsonwebtoken

这是来自我的koa服务器的相关内容:

import jwt, { fromAuthorizationHeader } from 'koa-jsonwebtoken';
import {serverCredentials} from './auth'
//...
console.log('loaded serverCredentials' + JSON.stringify(serverCredentials))    
app.use(jwt({ secret: serverCredentials.shared, extractToken: fromAuthorizationHeader }));

我的身份证明是:

import ty from 'then-yield'
import md5 from 'md5'
import Promise from 'bluebird'
const fs = Promise.promisifyAll(require('fs'));

const serverCredentials = ty.spawn(function* () {
  let src
  try {
    console.log('trying')
    src = yield fs.readFileAsync('./serverCredentials.json','utf8')
  } catch(e) {
    console.error('Error when opening serverCredentials file: ' + e.message);
    throw e
  }
  console.log('serverCredentials: ' + src)
  return JSON.parse(src)
})

export {serverCredentials}

但是我的日志说:

trying
loaded serverCredentials{"isFulfilled":false,"isRejected":false}

而不是服务器密钥。

1 个答案:

答案 0 :(得分:1)

serverCredentials是对JSON解析对象的承诺。你需要等待它:

import jwt, { fromAuthorizationHeader } from 'koa-jsonwebtoken';
import {serverCredentials as credentialsPromise} from './auth';

credentialsPromise.then(serverCredentials => {
    console.log('loaded serverCredentials' + JSON.stringify(serverCredentials))    
    app.use(jwt({secret: serverCredentials.shared, extractToken: fromAuthorizationHeader}));
});