不起作用:
console.log(obj.html_template); // outputs "myfile.html"
var html = fs.readFileSync(JSON.stringify(obj.html_template)); // file not found.
工作的:
console.log(obj.html_template); // "myfile.html"
var html = fs.readFileSync("myfile.html"); // Works.
我疯了。
答案 0 :(得分:3)
> JSON.stringify('myfile.html')
""myfile.html""
您的代码正在文件系统中查找文件"myfile.html"
(请注意多余的引号)。它不存在。
只需在没有字符串化的情况下查找它:
var html = fs.readFileSync(obj.html_template);
答案 1 :(得分:2)
当你调用JSON.stringify
时,它会将所有字符串转换为JSON格式字符串,并带有双引号。引用ECMAScript 5.1 Specification for JSON.stringify
,
如果
Type(value)
为String
,则返回使用参数 value 调用抽象操作Quote
的结果。
Quote
操作定义为here,它基本上用"
包围字符串,并处理字符串中的特殊字符。
所以JSON.stringify
会将一个字符串转换为abcd.txt
到"abcd.txt"
,就像这样
console.log(JSON.stringify("abcd.txt"));
// "abcd.txt"
不等于abcd.txt
。
console.log(JSON.stringify("abcd.txt") == "abcd.txt");
// false
但等于"abcd.txt"
。
console.log(JSON.stringify("abcd.txt") == '"abcd.txt"');
// true
因此,您的程序会搜索名为"abcd.txt"
而不是abcd.txt
的文件。这就是它无法找到文件并失败的原因。
要解决此问题,只需删除JSON.stringify
并直接传递字符串,就像这样
var html = fs.readFileSync(obj.html_template);
答案 2 :(得分:0)
为什么你首先使用JSON.stringify
?你应该能够做到
var html = fs.readFileSync(obj.html_template);