Node.JS - 文件名不接受变量

时间:2015-03-10 03:35:29

标签: javascript string node.js

不起作用:

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.

我疯了。

3 个答案:

答案 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);