You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NodeJS动态创建对象时遇意外模板字符串错误的解决办法

Node.js 动态引入控制器的模板字符串变量声明错误修复

问题场景

我尝试在 Node.js 中动态引入 Controllers,实体对象定义如下:

ENTITY : {
          USER            : 'user',
          COUNTRY         : 'country'
}

基于该对象编写的代码如下:

for (var key in ENTITY) {
    if (ENTITY.hasOwnProperty(key)) {
        const controllerName        = MiscHelp.camelCase(ENTITY[key], true) + 'Controller';
        console.log(controllerName);
        const controllerFile        = '../app/Http/Controllers/' + version  + '/' + controllerName;
        console.log(controllerFile);
        const `${controllerName}`   = require(controllerFile)(version);
    }       
}

控制台输出正常:

UserController
../app/Http/Controllers/v1/UserController
CountryController
../app/Http/Controllers/v1/CountryController

但代码中const ${controllerName} = require(controllerFile)(version);这一行触发了**"Unexpected Template String"**错误,需要解决这个问题。

错误原因

JavaScript 不允许用模板字符串直接作为const/let/var的变量名,变量声明时必须使用合法的标识符,无法直接通过动态字符串声明变量。

解决方法

方法1:用对象存储动态控制器(推荐)

创建一个空对象,将每个动态引入的控制器作为对象属性存入,属性名使用controllerName的值:

// 初始化空对象用于存储所有控制器
const controllers = {};
for (var key in ENTITY) {
    if (ENTITY.hasOwnProperty(key)) {
        const controllerName        = MiscHelp.camelCase(ENTITY[key], true) + 'Controller';
        console.log(controllerName);
        const controllerFile        = '../app/Http/Controllers/' + version  + '/' + controllerName;
        console.log(controllerFile);
        // 通过对象属性动态赋值
        controllers[controllerName] = require(controllerFile)(version);
    }       
}

后续可通过controllers.UserController或controllers['UserController']访问对应的控制器。

方法2:挂载到全局作用域(不推荐)

如果需要让控制器成为全局变量,可使用global对象赋值,但这种方式会污染全局作用域,仅在特殊场景下使用:

for (var key in ENTITY) {
    if (ENTITY.hasOwnProperty(key)) {
        const controllerName        = MiscHelp.camelCase(ENTITY[key], true) + 'Controller';
        console.log(controllerName);
        const controllerFile        = '../app/Http/Controllers/' + version  + '/' + controllerName;
        console.log(controllerFile);
        // 挂载到全局
        global[controllerName] = require(controllerFile)(version);
    }       
}

内容的提问来源于stack exchange,提问作者Saswat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 05:42:33