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

и мой аутентификации является:

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

для целей debuggin, вы пробовали 'fs.readFileAsync ('../ serverCredentials.json', 'utf8'), тогда (функция (Рез) {console.log (res)}) '? – JorgeObregon

+0

, комментируя последнюю строку, и это запустило catch для ENOENT .. но я исправил путь сейчас и все еще ту же проблему. обновление –

+0

Учитывая, что вы используете Bluebird, зачем выбирать вместо этого «Promise.coroutine»? И учитывая, что вы используете транспилер, почему бы просто не использовать 'async' /' await' сразу? – Bergi

ответ

1

serverCredentials - это обещание для вашего объекта JSON-parsed. Вам нужно будет ждать его:.

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

ах, ладно. что выглядит логичным. Я действительно крутился вокруг этого письма, забыл некоторые основы обещания на секунду. Спасибо. –

 Смежные вопросы

  • Нет связанных вопросов^_^