NodeJS 将模板文字与Lodash _.template()一起使用

1mrurvl1  于 2022-11-22  发布在  Node.js
关注(0)|答案(2)|浏览(198)

我尝试使用带有Lodash'_.template()的模板文字,根据另一个确定打开/关闭的函数的响应从JSON文件中选择消息,但它对我不起作用。
流量:

  • 函数运行逻辑并通过opencloseResponse.openclose对象返回openclose(假设工作正常,但未在下面的代码片段中显示)
  • 使用Lodash _.template(),我将用户的名字与messages.openmessages.close一起输入为first_name
  • 显示消息文本

不带模板文字的工作示例

messages.json

{
  "messages": {
    "open": "Hello ${ first_name }! We are open!",
    "closed": "Hello ${ first_name }! We are closed!"
  }
}

app.js

const _ = require('lodash');
const { messages } = require('messages.json');

const sendMessage = _.template(messages.open);
console.log(sendMessage({ first_name: 'Jeremy' }));

output

Hello Jeremy! We are open!

使用模板文字的失败示例

messages.json

{
  "messages": {
    "open": "Hello ${ first_name }! We are open!",
    "closed": "Hello ${ first_name }! We are closed!"
  }
}

app.js

const _ = require('lodash');
const { messages } = require('messages.json');

const sendMessage = _.template(`messages.${opencloseResponse.openclose}`);
console.log(sendMessage({ first_name: 'Jeremy' }));

output

messages.open

我希望我错过的只是一些简单的事情。它已经让我发疯了一整天。我感谢任何帮助!

v1l68za4

v1l68za41#

Lodash的模板和JavaScript的模板文字是完全不同的动物。如果你想继续使用这些JSON文件,你不会使用JavaScript的模板文字,你只需要使用动态属性访问:

const sendMessage = _.template(messages[opencloseResponse.openclose]);
console.log(sendMessage({ first_name: 'Jeremy' }));

如果你想使用模板文字,你可以把它们 Package 在 functions 中,比如,你可以使用messages.js

exports.messages = {
  "open": (first_name) => `Hello ${ first_name }! We are open!`,
  "closed": (first_name) => `Hello ${ first_name }! We are closed!`
};

然后

const messages = require('./messages');

console.log(sendMessage(messages[opencloseResponse.openclose]('Jeremy')));

或者,您也可以让函式接受对象,如同您的Lodash程式码一样(如果您愿意的话):

exports.messages = {
  "open": ({first_name}) => `Hello ${ first_name }! We are open!`,
//         ^----------^-------------------------------------------------- destructuring
  "closed": ({first_name}) => `Hello ${ first_name }! We are closed!`
//           ^----------^------------------------------------------------ destructuring
};

然后

const messages = require('./messages');

console.log(sendMessage(messages[opencloseResponse.openclose]({first_name: 'Jeremy'})));
h7appiyu

h7appiyu2#

您不需要样板常值。
只需使用方括号[]表示法来访问message属性

const sendMessage = await _.template(messages[opencloseResponse.openclose]);

相关问题