我刚刚创建了一个非常简单的带有Node JS的Web服务器,它询问JSON文件的名称,然后遍历它并将其中的某些键作为“格式化”的文本文件提供。
CODE:
var http = require('http'),
prompt = require('readline').createInterface({
input: process.stdin,
output: process.stdout
});
prompt.question("Which library? ", function (whichlib) {
"use strict"
var lib = require("./bot-client/lib/" + whichlib),
rules = lib.data.ruleset,
parse = function (ruleset, prefix) {
var key,
str;
for (key in ruleset) {
str += prefix + " - " + key + "\n";
str += (ruleset[key].hasOwnProperty("ruleset"))
? parse(ruleset[key].ruleset, prefix + "\t")
: "";
}
return str;
},
str = parse(rules, "");
console.log("Ready to serve page.");
http.createServer(function (req, res) {
console.log('Server running at http://127.0.0.1:8124/');
res.writeHead(200, {'Content-Type': 'text/plain'});
res.write(str);
res.end();
}).listen(8124, "127.0.0.1");
});
预期结果示例:
- key1
- key1.1
- key1.1.1
- key1.1.2
- key1.2
- key1.2.1
- key1.2.2
- key1.2.3
- key1.3
- key1.3.1
- key1.3.2
实际结果示例:
undefined - key1
undefined - key1.1
undefined - key1.1.1
- key1.1.2
- key1.2
undefined - key1.2.1
- key1.2.2
- key1.2.3
- key1.3
undefined - key1.3.1
- key1.3.2
问题:
我看不出为什么“未定义”应该出现,更不用说看到它的外观模式了。我错过了一些明显的东西吗?
答案 0 :(得分:1)
将字符串连接到仍为undefined
的变量:
var key,
str; //you don't set any value here
for (key in ruleset) {
str += prefix + " - " + key + "\n";
在第四行中,str
仍然未初始化。您可以通过将其设置为空字符串来修复它:
var key,
str = '';
for (key in ruleset) {
str += prefix + " - " + key + "\n";
答案 1 :(得分:1)
是的,您错过了str
和key
的初始化。
在JavaScript中,如果将未定义的变量作为字符串连接起来,它将逐字地说undefined
。
在您的情况下,请更改此内容:
var key,
str;
对此:
var key = '',
str = '';
初始化变量。