首页 > 解决方案 > 如何将 JavaScript 字符串转换为 node.js 中的可执行代码

问题描述

我已将查询保存在数据库中。我可以将查询作为字符串。

INSERT INTO alertsV SET Instance_ID = ${body.add.Instance_ID}

${body.add.Instance_ID}不是用价值代替。

预期结果应该是INSERT INTO alertsV SET Instance_ID = 1234

我正在使用nodejs。请帮我解决这个问题。这是功能。

  saveFormData: async function (req, res) {
     let form_id = parseInt(req.body.form_id);
     let body = req.body.form_data;
     let saveQuery = await sails.orientDb.command('select actions.save as 
     saveQuery from form where form_id=' + form_id).one();

     saveQuery = saveQuery.saveQuery; // i can get string here 'INSERT INTO alertsV SET Instance_ID = ${body.add.Instance_ID}'
     let result = await sails.orientDb.command(saveQuery).one();
     return res.json(result);
  }

标签: javascriptnode.jsecmascript-6

解决方案


您可以在模板文字反引号中包装一个字符串并将其传递eval给运行字符串插值:

saveQuery = eval('`' + saveQuery.saveQuery + '`'); 

const a = 10;
const str = 'test ${a} test';

console.log(eval('`' + str + '`'));

/*
if it's required to wrap the interpolated value into a quotes, 
you can do that by wrapping the embedded expression, prior to interpolation:
*/
console.log(eval('`' + str.replace(/(\${.*})/, '\'$1\'') + '`'));


推荐阅读