2015-06-04 5 views
0

Я пытаюсь опубликовать поля из формы, но lista [0] .usuario кажется пустым на странице нефрита.Ошибка узла Node + Express

Я использую: версия узла v0.12.3000 выразить 3.20.3

--My code--

--- app.js ---

var express = require('express'); 
var routes = require('./routes'); 
var http = require('http'); 
var path = require('path'); 

var app = express(); 

var v_login = require('./routes/login'); 

// all environments 
app.set('port', process.env.PORT || 3000); 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'jade'); 
app.use(express.logger('dev')); 
app.use(express.json()); 
app.use(express.urlencoded()); 
app.use(app.router); 
app.use(express.static(path.join(__dirname, 'public'))); 

// development only 
if ('development' == app.get('env')) { 
    app.use(express.errorHandler()); 
} 

app.get('/login', v_login.login); 
app.get('/login', v_login.get_enviar); 
app.post('/login', v_login.post_enviar); 

http.createServer(app).listen(app.get('port'), function(){ 
    console.log('Express server listening on port ' + app.get('port')); 
}); 

- --login.js ---

var lista = new Array(); 

function login(req, res){ 
    res.render('login'); 
}; 

exports.login = login; 

exports.get_enviar = function(req, res){ 
    login(req, res); 
} 

exports.post_enviar = function(req, res){ 
var usuario = req.body.usuario; 
var password = req.body.password; 
console.log(usuario); 
console.log(password); 

lista.push({ 
    usuario: usuario, 
    password: password 
}) 
res.render('login', {lista: lista}); 
console.log(lista[0].usuario); 
console.log(lista[0].password); 

} 

--- login.jade ---

doctype html 
html(lang='en') 
head 
body 
#container 
form#frm(method="post", name="frm", action="login", enctype="application/x-www-form-urlencoded") 
h1 Login 
h2 usuario 
input#usuario(name='usuario', type='text', value='') 
br 
h2 password 
input#password(type='password', name='password', value='') 
br 
br 
input(type='submit', value='Conectar') 
br 
br 
if lista 
    h1 #{lista[0].usuario} 

#footer 

ответ

1

Вы вызывая функцию входа в систему:

exports.post_enviar = function(req, res){ 
    var usuario = req.body.usuario; 
    var password = req.body.password; 
    lista.push({ 
     usuario: usuario, 
     password: password 
    }) 
    login(req, res); // Here 
} 

Но если вы видите, у вас нет объявления вашей функции в файле login.js.

Вы только имеете Войти экспонировались на экспорте объект:

exports.login = function(req, res){ 
    res.render('login'); 
}; 

Как и выше пост говорит, вы можете объявить функцию входа в отдельной функции:

function login(req, res){ 
    res.render('login'); 
} 

, а также обновить экспорт объект:

exports.login = login; 

так что:

exports.post_enviar = function(req, res){ 
    var usuario = req.body.usuario; 
    var password = req.body.password; 
    lista.push({ 
     usuario: usuario, 
     password: password 
    }) 
    login(req, res); // Here 
} 

будет работать нормально.

Было бы что-то вроде этого: https://gist.github.com/wilsonbalderrama/d84cc800efb1169fea81


ОБНОВЛЕНИЕ:

  • Вы используете Экспресс 3.X

Что касается вашей другой проблемы необходимо добавить подчеркнутая на ваш приложение.JS файл:

 
    // all environments 
    .. 
    app.use(express.logger('dev')); 
    app.use(express.json()); 
    app.use(express.urlencoded()); 
    .. 

Тогда вы будете иметь возможность получить значения и Новичок пароль в вашем req.body объекта.


ДРУГОЙ UPDATE:

Вы должны проверить, если переменная Lista уже содержит имя пользователя и пароль. Изменить подчеркнутый код index.jade:

 
     .. 
     input(type='submit', value='Conectar') 
     br 
     br 

    if lista 
     h1 #{lista[0].usuario} 

    #footer 
    .. 

После того, как вы закончите и пароль Новичок значение обработки, необходимо вновь сделать свой указательный HTML передавая массив списка:

Тогда в вашем exports.post_enviar метод изменить подчеркнутый код в конце методы:

 
     .. 
     lista.push({ 
      usuario: usuario, 
      password: password 
     }) 

     console.log(lista[0].usuario); 
     console.log(lista[0].password); 

     res.render('index', {lista: lista}); 
    } 
+0

@PatricioCarvajalH. вы можете увидеть этот ответ для другой проблемы. http://stackoverflow.com/questions/7522034/node-js-express-form-post-req-body-not-working. Вы не получаете значения из своей html-формы на express.js в вашем req.body – Wilson

+0

Уилсон, отлично! но все еще не вижу значения в файле login.jade (lista [0] .usuario) –

+0

Я добавил тег enctype, но все еще могу видеть значение lista [0] .usuario в файле jade, приведенный выше код обновленный –

1

Ваша функция входа в систему экспортируется, но не называется. Вы должны назвать это так:

exports.login = function login(req, res){ 
    res.render('login'); 
}; 

Или вы можете назвать ваш метод Войти, как это: exports.login(req, res);

Вы также можете delcare вашу функцию и экспортировать его отдельно:

function login(req, res){ 
    res.render('login'); 
}; 

exports.login = login; 
-1

Вы толкнуть только один элемент в вашей лилии массива та так:

lista[1] does not exist. 

Чтобы получить пароль, который вы должны попробовать:

lista[0].password; 
Смежные вопросы