使用nodejs从动态字符串调用动态函数



我使用expressnodejs在我的项目中,在处理一个特定模块时发生了一个场景。我为不同的角色做了不同的函数,所以根据登录用户的角色,动态调用另一个函数。我想要一个技巧,代码应该是最少的行。所以请给我一个好的解决方案。

if (userRole.code === ROLE.REFERRINGPROVIDER) {
query = await referralUser(tabCode, userId, query);
} else if (userRole.code === ROLE.CONSULTINGPROVIDER) {
query = await consultingUser(tabCode, userId, query);
} else if (userRole.code === ROLE.PARENT) {
query = await parentUser(tabCode, userId, query);
} else if (userRole.code === ROLE.PHYSICIAN) {
query = await physicianUser(tabCode, userId, query);
}

如上面的例子所示,我必须为不同的用户编写代码,所以我必须使它成为一个简单的一行函数。

可以通过字符串名称调用函数。例如:

function funcOne() {
console.log('funcOne');
}
function funcTwo() {
console.log('funcTwo');
}
function funcThree() {
console.log('funcThree');
}
function funcFour() {
console.log('funcFour');
}
function funcFive() {
console.log('funcFive');
}
const func: { [K: string]: Function } = {
funcOne,
funcTwo,
funcThree,
funcFour,
funcFive
};
// console log output: "funcOne"
func['funcOne']();
// console log output: "funcFour"
func['funcFour']();
// console log output: "funcTwo"
func['funcTwo']();

在您的示例中,使用ROLE将其键映射到函数:

const func: { [K: string]: Function } = {
[ROLE.REFERRINGPROVIDER]: referralUser,
[ROLE.CONSULTINGPROVIDER]: consultingUser,
[ROLE.PARENT]: parentUser,
[ROLE.PHYSICIAN]: physicianUser
};
query = await func[userRole.code](tabCode, userId, query);

您可以使用此解决方案:)

const userRole = { code: 'referral' };
async function referralUser(tabCode, userId, query){
console.log(tabCode, userId, query);
return "referralUser Called!";
}
async function consultingUser(tabCode, userId, query){
console.log(tabCode, userId, query);
return "consultingUser Called!";
}
async function parentUser(tabCode, userId, query){
console.log(tabCode, userId, query);
return "parentUser Called!"
}
let functionName = userRole.code + 'User';
eval(functionName)("tabCode", "userId", "query").then((results)=>{
console.log(results);
});