2016-09-22 5 views
1

私はユーザーのIPを記録するポーリングアプリを作成しています。投票したときの時刻に加えて、投票した選択肢もあります。array.pushを使用すると、定義されていません。

これを行うには、これらのそれぞれをプロパティとして含む各「投票」のオブジェクトを作成し、そのオブジェクトを配列にプッシュすることが自分のニーズに合っていると想像しました。

私のオブジェクトを配列にプッシュしてみるまで、すべてうまく動いていました。私は現在、私の配列は未定義であると言います。

正確には何が起こっていますか?私は、インデックスを使用して、オブジェクトにvotingArray [i]を設定しようとしましたが、それは同様に未定義のエラーを与えました。ここで

は私のコードです:

//Vote for the pet passed into by user 
function vote(pet, time){ 
    linkService.incrementCount(pet); 
    trackVote(pet, time); 

    res.render('vote', { 
    pet: pet 
}); 
} 

var votingArray = []; 

function trackVote(pet, time) { 

    var voteObject = { 
     time: time, 
     pet: pet, 
     ip: req.ip 
     }; 

console.log(voteObject); 
    votingArray.push(voteObject); 
    console.log(votingArray); 

} 

function showResults(){ 
res.render('results', { 
    votingArray: votingArray 
    }); 
} 

そして、ここでは私のコンソールでのエラーです:

(ライン69 'のvotingArray.push(voteObject);' である)

Express started on http://localhost:8080; press Ctrl-C to terminate. 
{ time: 1474584882143, pet: 'scout', ip: '::ffff:10.240.1.15' } 
TypeError: Cannot read property 'push' of undefined 
at trackVote (/home/ubuntu/workspace/Projects/projectTwo/app.js:69:14) 
at vote (/home/ubuntu/workspace/Projects/projectTwo/app.js:51:6) 
at /home/ubuntu/workspace/Projects/projectTwo/app.js:43:6 
at Layer.handle [as handle_request] (/home/ubuntu/workspace/Projects/projectTwo/node_modules/express/lib/router/layer.js:95:5) 
at next (/home/ubuntu/workspace/Projects/projectTwo/node_modules/express/lib/router/route.js:131:13) 
at Route.dispatch (/home/ubuntu/workspace/Projects/projectTwo/node_modules/express/lib/router/route.js:112:3) 
at Layer.handle [as handle_request] (/home/ubuntu/workspace/Projects/projectTwo/node_modules/express/lib/router/layer.js:95:5) 
at /home/ubuntu/workspace/Projects/projectTwo/node_modules/express/lib/router/index.js:277:22 
at param (/home/ubuntu/workspace/Projects/projectTwo/node_modules/express/lib/router/index.js:349:14) 
at param (/home/ubuntu/workspace/Projects/projectTwo/node_modules/express/lib/router/index.js:365:14) 

編集:

私は宣言しているが、varriable 'votingArray'私のスニペットには、私がこれらのコメントと答えを満たすために必要なものを書き直したものがすべて含まれていないことがわかりました。

私はまだvotingArray.pushについて同じエラーが発生しています。

var votingArray = []; 

//Vote for the pet passed into by user 
function vote(pet, time){ 
    linkService.incrementCount(pet); 

    var votingObject = 
    { 
     ip: req.ip, 
     pet: pet, 
     timecode: time 
    }; 

    votingArray.push(votingObject); 

    res.render('vote', { 
    pet: pet 
    }); 
} 


function showResults(){ 
res.render('results', { 
    votingArray: votingArray 
    }); 
} 
+2

に 'votingArray'はundefined''あります。正確にエラーの内容を示します。 – vlaz

+0

はい、それはなぜ定義されていませんか?私はそれを宣言し、配列とconsole.logにプッシュしないかどうかを定義すると、同じエラーが発生します。 –

+2

'votingArray = [];'のように 'votingArray'を初期値で初期化しようとします。 –

答えて

2

あなたの変数votingArrayが初期化されていません。ここで

は私の新しいコードです。あなたはそれを配列にしたい場合は、あなたの配列を初期化したり、ファイル内の浮遊VARを持つのではなく、関数に渡し

var votingArray = []; // Empty array instance 
+1

'配列のように振る舞うようにするには、配列でなければなりません。 – vlaz

+1

これを宣言すると、同じエラーコードが返されます。私は私の質問を更新しました。 –

+0

その後、あなたはアプリを再起動しましたか? – zerkms

0

でライン

var votingArray; 

を交換する必要があります。あなたの質問でtrackVoteが呼び出された場所の使い方もわかりませんが、これが私の提案です。

var votingArray = []; 

function trackVote(pet, time) { 

    var voteObject = { 
     time: time, 
     pet: pet, 
     ip: req.ip 
     }; 

    console.log(voteObject); 
    votingArray.push(voteObject); 
    console.log(votingArray); 

} 

function trackVote(pet, time) { 
    var votingArray = []; 
    var voteObject = { 
     time: time, 
     pet: pet, 
     ip: req.ip 
     }; 

    console.log(voteObject); 
    votingArray.push(voteObject); 
    console.log(votingArray); 

} 

又は

function trackVote(pet, time, votingArray) { 

    var voteObject = { 
     time: time, 
     pet: pet, 
     ip: req.ip 
     }; 

    console.log(voteObject); 
    votingArray.push(voteObject); 
    console.log(votingArray); 

} 
+0

私のコードをかなり整理しましたが、それ以前にもあなたのメソッドに続いて同じエラーが出ました。 –

+0

どこで 'trackVote'を呼び出していますか? – httpNick

+0

私の現在のコードでは、もはや必要はありません。関数投票で関数trackVoteが何をしたかだけを行います。 –

関連する問題