我不确定在这种情况下使用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
进行的所有操作都会给我一种不好的感觉