使用 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);
有人可以就模板文字的正确语法为我指出正确的方向吗?
我有以下代码(没有模板文字,工作正常):
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);