0
私は多くのAPIを実装するためにkoa
とTypescript
を使用していますが、いくつかのAPIで、私は、ユーザーがログインであるかどうかを確認する必要があり、私はこのように実行します。アクションの前にログインを検証する方法は?
export async function list_products(req: product.list_normal.Request):promise<product.list_normal.Response> {
// no need to check login here
....
return products;
}
export async function pay(req: shop.pay.Request): promise<shop.pay.Response> {
const isLogin = this.session && this.session.userInfo && this.session.userInfo.userId;
// check login here
if (!isLogin) {
return {
errorId: "need_login.error",
errorDesc: "please login"
}
}
...
return resp
}
問題は、私はそれぞれこれを実行する必要がということです時間が、私はこのような何かをしたい:あなたが見ることができるよう
function need_login(target: Object, propertyKey: string, descriptor: TypedPropertyDescriptor<any>) {
let originalMethod = descriptor.value;
descriptor.value = function(...args: any[]) {
const req = args[0]
if (!req.factoryUserId) {
return {
errorId: "need_login_error",
errorDesc: "please login",
}
} else {
let result = originalMethod.apply(this, args); // run and store the result
return result; // return the result of the original method
}
};
return descriptor;
}
export async function list_products(req) {
....
return products;
}
@need_login
export async function pay(req) {
...
return resp
}
が、私はpay
方法でデコレータneed_login
を追加し、これは偉大である必要があり、しかしTypescript
デコレータは関数内で使用することはできません:
Decorators are not valid here
私はこの簡単を行うための任意の選択肢を持っているんだから私はを求めていますか?