2017-01-31 3 views
0

koa-jsonwebtoken과 함께 사용할 비밀을로드하려고합니다.then yield 모듈을 비동기 적으로 파일을 읽는 방법

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 })); 

내 인증은 다음과 같습니다 :

여기 내 KOA 서버에서와 관계있는 비트의

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} 

합니다.

+0

, 당신은'fs.readFileAsync ('../ serverCredentials.json', 'UTF-8') 다음 (기능 (고해상도)을 시도했다가 {CONSOLE.LOG (res)})'? – JorgeObregon

+0

마지막 행을 주석 처리하고 ENOENT에 대한 catch를 실행했음을 나타냅니다. 그러나 이제는 경로를 수정했지만 여전히 동일한 문제가 있습니다. updated –

+0

Bluebird를 사용하고 있다면, 왜 Promise.coroutine 대신에 yield를 선택하겠습니까? 그리고 당신이 transpiler를 사용한다면'async' /'await'를 사용하지 않을까요? – Bergi

답변

1

serverCredentials은 JSON 구문 분석 객체에 대한 약속입니다. 당신은 그것을 기다릴 필요합니다. debuggin 목적

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})); 
}); 
+0

아, 알았어요. 논리적으로 보입니다. 나는 이것을 정말로 쓰고 있었고, 잠깐 약속의 기초를 잊었다. 고맙습니다. –