2016-05-26 3 views
1

Я пытаюсь распечатать содержимое формы, сохраненной в массиве с именем 'userInfo', в файл ejs, но я сохраняю сообщение об ошибке «userInfo не определен», что я делать не так?Передача массива в выражении в файл ejs

Вот код JS:

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) 
}); 

Вот что на EJS файл

Форма Результаты
<ul> 
    <% for(var i=0; i<userInfo.length; i++) {%> 
    <li><%= userInfo[i] %></li> 
    <% } %> 
</ul> 

Спасибо за любую помощь или совет предложил.

ответ

1

Переменная вы передаете к EJS называется users, не 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, разреш) { userInfo.push ({ имя: req.body.name, местные: req.body.dojoLocation, языки: req.body.language, комментарий: req.body.comment }); console.log (USERINFO); res.redirect ('/') результаты }); –

+0

@BenJohnson Я добавил немного больше разъяснений, надеюсь, этого достаточно. Если нет, можете ли вы уточнить, что вы хотите объяснить? – robertklep

+0

Я просто перечитал его несколько раз и получил его! Спасибо! –

Смежные вопросы