0

JSONファイルの名前を要求し、それをループして、その中の特定のキーを「フォーマットされた」テキストファイルとして提供するNode JSを使用して、非常に単純なWebサーバーを作成しました。

コード:

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

質問:

「未定義」が表示される理由がまったくわかりません。ましてや、その外観にパターンが見られることはありません。明らかな何かが欠けていますか?

4

2 に答える 2

1

まだ変数に文字列を連結しますundefined:

 var key,
     str; //you don't set any value here
     for (key in ruleset) {
         str += prefix + " -  " + key + "\n";

4 行目でstrは、まだ初期化されていません。空の文字列に設定することで修正できます。

var key,
    str = '';
    for (key in ruleset) {
        str += prefix + " -  " + key + "\n";
于 2013-08-30T07:47:35.677 に答える