2017-01-31 24 views
0

我想加載一個祕密使用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} 

,而不是服務器密鑰。

+0

爲debuggin目的,你有沒有試過'fs.readFileAsync( '../ serverCredentials.json', 'utf-8'),那麼(函數(RES){的console.log (res)})'? – JorgeObregon

+0

註釋掉最後一行,這樣做的確觸發了ENOENT的捕獲......但我現在糾正了這條路徑,仍然是同樣的問題。更新 –

+0

鑑於您使用的是藍鳥,爲什麼選擇當時的產量而不是'Promise.coroutine'?考慮到你正在使用一個轉譯器,爲什麼不直接簡單地使用'async' /'await'呢? – Bergi

回答

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

啊,好吧。看起來合乎邏輯。我真的寫了這麼多,忘記了一些承諾的基本知識一秒鐘。謝謝。 –