首页 > 解决方案 > 用 javascript 模板文字推断变量的正确语法?

问题描述

关于模板文字的正确语法,有人可以为我指出正确的方向吗?

我有以下代码(没有模板文字,工作得很好):

const dbUrl = 'localhost:27017/imgManager';
mongoose.connect('mongodb://' + dbUrl, { useNewUrlParser: true });

现在我想useNewUrlParser: true输入一个变量:

const dbUrl = 'localhost:27017/imgManager',
      dbOptions = 'useNewUrlParser: true';
mongoose.connect('mongodb://' + dbUrl, { dbOptions });

当然不起作用,mongoose.connect()抱怨它没有dbOptions

$ node server.js 
Server up: http://localhost:3300
the options [dbOptions] is not supported

我想模板文字是要走的路,但是正确的语法是什么?我尝试了以下,但没有一个工作:

`mongoose.connect('mongodb://' + dbUrl, { ${dbOptions} });`
mongoose.connect(`mongodb://${dbUrl}, { ${dbOptions} }`);
mongoose.connect(`mongodb:\/\/${dbUrl}, { ${dbOptions} }`);

任何想法 ?

标签: javascripttemplate-literalsextrapolation

解决方案


模板文字不能在任意位置工作,它们不会创建任意 JS 语法。(没有标签)它们只创建字符串,并且只创建一个值,而不会同时创建两个参数。作为选项,您需要传递一个对象:

const dbUrl = 'localhost:27017/imgManager',
      dbOptions = { useNewUrlParser: true };
mongoose.connect(
   `mongodb://${ dbUrl }`, // first argument
    dbOptions // second argument
);

如果您真的将选项作为字符串获取,则需要将它们解析为一个对象,例如:

const dbUrl = 'localhost:27017/imgManager',
      dbOptions = '"useNewUrlParser": true';
mongoose.connect(
   `mongodb://${ dbUrl }`, // first argument
    JSON.parse(`{${ dbOptions }}`) // second argument. The string is '{' + dbOptions + '}'
);

推荐阅读