Javascript 如何异步读取模块的文件
我正在尝试加载一个用于koa jsonwebtoken的秘密Javascript 如何异步读取模块的文件,javascript,node.js,bluebird,Javascript,Node.js,Bluebird,我正在尝试加载一个用于koa jsonwebtoken的秘密 这里是我的膝关节炎服务器的相关位: import jwt, { fromAuthorizationHeader } from 'koa-jsonwebtoken'; import {serverCredentials} from './auth' //... console.log('loaded serverCredentials' + JSON.stringify(serverCredentials)) app.use(j
这里是我的膝关节炎服务器的相关位:
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}
而不是服务器密钥。服务器凭据是对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}));
});
出于调试目的,您是否尝试过fs.readFileAsync'../serverCredentials.json'、'utf8'。函数{console.logres}?注释掉最后一行并执行该操作确实触发了Enoint的捕获。。但我现在已经纠正了路径,仍然是同样的问题。更新既然你在使用蓝鸟,为什么选择then yield而不是Promise.coroutine?既然您使用的是transpiler,为什么不直接使用async/Wait呢?啊,好的。这看起来合乎逻辑。写这篇文章时我真的被吓了一跳,一时忘记了一些基本的承诺。非常感谢。