使用 javascript 模板文字外推变量的正确语法?

Right syntax for extrapolating a variable with javascript template literals?

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

我有以下代码(没有模板文字,工作正常):

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

我想模板文字是可行的方法,但正确的语法是什么?我尝试了以下方法,但 none 有效:

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

有什么想法吗?

由于 dbOptions 在您的方法中是一个字符串,因此 { dbOptions } 正在创建一个 js 对象,如下所示:

// cause that mongoose is complaining because it's not expecting 
// options with property name dbOptions
{ dbOptions: 'useNewUrlParser: true' } 

您应该执行以下操作

const dbUrl = 'localhost:27017/imgManager',
      dbOptions = {useNewUrlParser: 'true'};    

// `mongodb://${dbUrl}` will generate the following string:
//  "mongodb://localhost:27017/imgManager" 
mongoose.connect(`mongodb://${dbUrl}`, dbOptions);

模板文字在任意位置不起作用,它们不会创建任意 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 + '}'
);

模板文字仅适用于字符串,不适用于对象。 dbOptions 应该是一个对象,而不是字符串。

const dbOptions = { useNewUrlParser: true };

然后你使用变量本身:

mongoose.connect('mongodb://' + dbUrl, dbOptions);