【问题标题】:generate a js file dynamically using fs node使用fs节点动态生成js文件
【发布时间】:2022-01-20 01:00:07
【问题描述】:

我正在尝试通过运行节点脚本来生成 .js 文件。这是我的代码。

const dynamicCode = [
    {
        "ClassCode" : "9620",
        "Rate" : 0.99,
        "IsActive" : "TRUE",
        "StartDate" : "2021-10-19T17:00:00.000-07:00",
        "EndDate" : "9999-12-30T16:00:00.000-08:00"
    },
    {
        "ClassCode" : "0038",
        "Rate" : 12.19,
        "IsActive" : true,
        "StartDate" : "2021-05-31T17:00:00.000-07:00",
        "EndDate" : "9999-12-30T16:00:00.000-08:00"
    }
]

const bdCode = module.exports = {
    async up(db, client) {
      await db.collection('Configuration_Lookup').deleteMany();
      await db.collection('Configuration_Lookup').insertMany(dynamicCode)
    },
  
    async down(db, client) {
      // TODO write the statements to rollback your migration (if possible)
      // Example:
      // await db.collection('albums').updateOne({artist: 'The Beatles'}, {$set: {blacklisted: false}});
    }
  };

fs.writeFileSync("bds.js", JSON.stringify(bdCode, null, 2), 'utf-8');

虽然这适用于包含简单文本的 .txt 文件,或者像 json 对象这样的不可执行代码。它在运行 writeFileSync 函数之前执行。所以插入js文件的数据是

{}

我们如何生成一个包含工作代码的 js 文件

【问题讨论】:

  • 这个问题有帮助吗? stackoverflow.com/q/53501756/14032355
  • 您为什么要这样做,因为任何人都可以编写代码并尝试在服务器上执行它,您认为这样做不安全吗?你想达到什么目标?
  • 嗨 Apoorva,这个 sn-p 只是为了自动化日常流程,这不会托管在服务器上,我需要从 xlsx 文件创建一个 mongo 迁移脚本来更新数据库中的数据。

标签: javascript node.js fs


【解决方案1】:

您可以通过使用 Function 构造函数从中创建函数来将代码作为字符串运行。

const code = "let x = 100; console.log(x + 1)";  
const run = new Function(code);  
run();

将此字符串写入js文件并使用子进程运行js文件。

【讨论】:

  • 哇,这很有趣。我不知道你可以用 Function 构造函数做到这一点 lol
  • 是的,这样你就可以实际运行代码了。您可以使用 eval(string),但它存在安全漏洞。
  • 是的,当我需要做这样的事情时,我总是会使用 eval;但是,由于上述安全漏洞,我总是试图避免它。函数构造函数如何避免这些缺陷?
【解决方案2】:

我通过以下代码解决了这个问题。

const dynamicCode = [
    {
        "ClassCode" : "9620",
        "Rate" : 0.99,
        "IsActive" : "TRUE",
        "StartDate" : {"$date": "2021-10-19T00:00:00Z"},
        "EndDate" : {"$date": "9999-12-30T23:59:59Z"}
    },
    {
        "ClassCode" : "0038",
        "Rate" : 12.19,
        "IsActive" : true,
        "StartDate" : {"$date": "2021-10-19T00:00:00Z"},
        "EndDate" : {"$date": "9999-12-30T23:59:59Z"}
    }
]

const bdCode = `module.exports = {
    async up(db, client) {
      await db.collection('Configuration_Lookup').deleteMany();
      await db.collection('Configuration_Lookup').insertMany(${JSON.stringify(dynamicCode, null, 2)})
    },
  
    async down(db, client) {
      // TODO write the statements to rollback your migration (if possible)
      // Example:
      // await db.collection('albums').updateOne({artist: 'The Beatles'}, {$set: {blacklisted: false}});
    }
  };`

fs.writeFileSync("bds.js", bdCode);

【讨论】:

    猜你喜欢
    • 2019-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    相关资源
    最近更新 更多