我是在最近使用Express的背景下首次在Koa.JS中构建应用程序。
我正在使用Babel在运行时转换代码,同时开发给我带来了ES6 +代码的优势。
我在Koa中遇到问题,定义了一个我想要使用的中间件并存储在ctx对象上以便稍后在我的应用程序中使用。我不确定我哪里出错了,因为我可以在Express中做类似的事情(虽然不是在ES6代码中)。
这是我的中间件:
require 'rqrcode_png'
class QrCodeTag < Liquid::Tag
include Jekyll::LiquidExtensions
def initialize(tag_name, url, tokens)
super
params = Shellwords.shellwords url
@url = url.strip
end
def render(context)
page_url = Liquid::Template.parse('{{'+@url+'}}').render context
qr = RQRCode::QRCode.new(page_url, size: 4) # Size increased because URLs can be long
png = qr.to_img
png = png.resize(120, 120)
<<-MARKUP.strip
<div class="qrcode">
<a href="#{page_url}" target="_blank"> <img src="#{png.to_data_url}" alt="#{page_url}"> </a>
</div>
MARKUP
end
end
Liquid::Template.register_tag('qr', QrCodeTag)
我的app.js条目文件中我使用中间件的部分:
const Config = require('../../Config');
import jwt from 'jsonwebtoken';
const JWTController = () => {
return {
async generateToken(tokenVars) {
const secretKey = Config.auth.secret;
const claims = {
sub: tokenVars.userid,
iss: Config.auth.issuer,
account: tokenVars.accountId,
permissions: ''
};
let token = await jwt.sign(claims, secretKey);
return token;
},
async decodeClaims(token) {
const decodedToken = jwt.decode( token, {complete: true} );
return decodedToken;
}
}
};
export default JWTController;
有人能看出为什么这不起作用吗?
由于
答案 0 :(得分:2)
将中间件定义更改为
app.use(async (ctx, next) => {
ctx.JWTController = JWTController;
await next();
});