Node.js,模板化JSON,评估

时间:2018-12-04 16:18:22

标签: javascript node.js templates aws-lambda eval

我不确定在这种情况下使用eval是否有效,或者是否有更好的解决方案来解决我的问题。我对nodejs经验很少。

我有一个用nodejs编写的简单AWS lambda函数,只需要返回一个长的JSON文档,其中包含一些在函数中确定的变量字段。

我想要一个包含JSON和一些变量的模板文件。假设它被称为template.json.js,并且具有以下内容:

{
    "key": "Some static key",
    "name": "Example",
    "description": "Blah Blah",
    "url": URL
}

在这个简单的示例中,URL应该替换为一些变量值。说一个环境变量。

模板文件是完全安全的,因为我正在从文件中读取它,只有程序员才能对其进行编辑。

因此,我想到的最简单的方法就是在lambda函数中使用eval运行模板。像这样:

'use strict';

const fs = require('fs');

let response;

function renderTemplate() {
    // template variables
    var URL = "" + process.env.BASE_URL;

    // render template
    let jsonFile = fs.readFileSync('template.json.js').toString();
    return eval('(' + jsonFile + ')');
}

exports.lambdaHandler = async (event, context) => {
    try {
        response = {
            'statusCode': 200,
            'body': JSON.stringify(renderTemplate())
        }
    } catch (err) {
        console.log(err);
        return err;
    }

    return response
};

哪个效果很好。

我对这种方法有何看法

  • 易于实现和理解
  • 不需要额外的库
  • 很快
  • 使用字符串,整数,数组和对象
  • 正确处理特殊字符
  • 我认为,只要我正确键入检查用户输入(字符串或整数),它应该是安全的

为什么我对这种方法不满意

  • 上下文之间没有分隔(从包含函数的模板中可以访问所有内容)
  • 使用eval进行的所有操作都会给我一种不好的感觉
  • 我不确定即使正确地检查了输入是字符串,也没有某种恶意的方法来利用用户输入

0 个答案:

没有答案