2016-05-26 17 views
1

'userInfo'という配列に保存されたフォームの内容をejsファイルに出力しようとしていますが、「userInfoが定義されていません」というエラーが表示されます間違っている?ejsファイルにエクスプレスで配列を渡す

フォームが提供する任意のヘルプやアドバイスを
<ul> 
    <% for(var i=0; i<userInfo.length; i++) {%> 
    <li><%= userInfo[i] %></li> 
    <% } %> 
</ul> 

おかげで結果ファイルEJSに何をここで

var express = require('express'), 
    bodyParser = require('body-parser'), 
    app = express(), 
    port = 3000, 
    userInfo = []; 


app.set('view engine', 'ejs'); 
app.set('views', __dirname + '/views'); 

app.use(bodyParser.urlencoded({extended: true})); 

app.get('/', function(req, res) { 
    res.render('index'); 
}); 

app.post('/formResults', function(req, res) { 
    userInfo.name = req.body.name; 
    userInfo.local = req.body.dojoLocation; 
    userInfo.lang = req.body.language; 
    userInfo.comment = req.body.comment; 

    console.log(userInfo); 

    res.redirect('/results') 
}); 

app.get('/results', function(req, res) { 
    res.render('results', {users: userInfo}); 

}) 

app.listen(port, function(req, res) { 
    console.log('server running on port: ' + port) 
}); 

です:

はここでJSコードです。あなたはEJSに渡している変数がusersと呼ばれる

答えて

1

、ないuserInfo

res.render('results', { users: userInfo }); 
         ^^^^^ 

だからあなたのテンプレートは次のようになります。

<ul> 
    <% for(var i=0; i<users.length; i++) {%> 
    <li><%= users[i] %></li> 
    <% } %> 
</ul> 

しかし、あなたはuserInfoを宣言していてもすることが配列、あなたはオブジェクトとしてそれを使用しています。

app.post('/formResults', function(req, res) { 
    userInfo.push({ 
    name : req.body.name, 
    local : req.body.dojoLocation, 
    lang : req.body.language, 
    comment : req.body.comment 
    }); 

    console.log(userInfo); 

    res.redirect('/results') 
}); 

userInfo.push()userInfoという配列に/formResultsへの要求が行われるたびに新しいオブジェクトを追加し、私はあなたが望むものであると仮定している)そして、あなたのテンプレートは、オブジェクトを参照する必要があります代わりにこれを試してみてくださいプロパティ(nameなど):

<ul> 
    <% for(var i=0; i<users.length; i++) {%> 
    <li><%= users[i].name %></li> 
    <% } %> 
</ul> 
+0

ヘルプrobertklepに感謝します。 このビットをもう一度説明できますか? app.post( '/ formResults'、関数(REQ、RES){ userInfo.push({ 名:req.body.name、 ローカル:req.body.dojoLocation、 ラング:req.body.language、 コメント:req.body.comment }); にconsole.log(ユーザー情報); res.redirect( '/結果') })。 –

+0

@BenJohnson私はもう少し明確化を加えました、私はそれが十分であることを願っています。そうでない場合は、あなたが説明したいことについてより具体的になりますか? – robertklep

+0

私はちょうどそれを数回読んでそれを手に入れました!本当にありがとう! –