gpt4 book ai didi

javascript - 如何使用 babel 为我的 js 服务模块实现经过身份验证的 es 7 装饰器

转载 作者:行者123 更新时间:2023-11-30 16:28:25 24 4
gpt4 key购买 nike

我在我的 flux fluxible js 项目中使用带有 decorator stage:0 支持的 babel,我想为我的服务 api 模块使用经过身份验证的装饰器来检查有效的用户 session 。

谷歌搜索,似乎有几篇文章解释了不同的变体,但找不到明确的文档或说明。

这是我到目前为止所做的尝试,我知道我的身份验证函数的参数不正确,并且不确定我是否需要为我的模块实现一个类而不是仅仅使用导出对象。

我找不到文档的部分是如何实现装饰器本身 - 在这种情况下,装饰函数将接收并检查带有 req 参数的东西。

// how do I change this method so that it can be implemented as a decorator
function checkAuthenticated(req) {

if (!req.session || !req.session.username)
{
throw new Error('unauthenticated');
}
}

module.exports = {
@checkAuthenticated
read: function(req, resource, params, serviceConfig, callback) {
//@authenticated decorator should allow me to move this out of this here
//checkAuthenticated(req);
if (resource === 'product.search') {
var keyword = params.text;
if (!keyword || keyword.length === 0) {
return callback('empty param', null);
} else {
searchProducts(keyword, callback);
}
}

}
};

最佳答案

class Http{
@checkAuthenticated
read(req, resource, params, serviceConfig, callback) {
if (resource === 'product.search') {
var keyword = params.text;
if (!keyword || keyword.length === 0) {
return callback('empty param', null);
} else {
this.searchProducts(keyword, callback);
}
}
}

searchProducts(keyword, callback) {
callback(null, 'worked');
}
}

function checkAuthenticated(target, key, descriptor) {
return {
...descriptor,
value: function(){
console.log(arguments);
const req = arguments[0];
if (!req.session || !req.session.username) {
throw new Error('unauthenticated');
}
return descriptor.value.apply(this, arguments);
}
};
}

let h = new Http();

h.read(
{ session: { username: 'user' } },
'product.search',
{ text: 'my keywords' },
null,
function(err, result) {
if (err) return alert(err);
return alert(result);
}
);

参见 jsbin http://jsbin.com/yebito/edit?js,console,output

关于javascript - 如何使用 babel 为我的 js 服务模块实现经过身份验证的 es 7 装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33757799/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com