javascript - Node+Express 发布错误

标签 javascript node.js express

我正在尝试从表单中发布字段,但 lista[0].usuario 在 jade 页面中似乎为空。

我正在使用: Node 版本 v0.12.3000 express 3.20.3

--我的代码--

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

}

---登录.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

最佳答案

您正在调用登录函数:

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

<小时/>

更新:

  • 您正在使用 Express 3.X

关于您的另一个问题,您需要将强调的行添加到您的 app.js 文件中:

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

然后您将能够在 req.body 对象中获取值 usuariopassword

<小时/>

另一个更新:

您需要检查lista变量是否已包含用户名和密码。 将强调的代码更改为index.jade:

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

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

    #footer
    ..

完成处理 usuario 和密码值后,您需要通过列表数组重新渲染索引 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});
    }

关于javascript - Node+Express 发布错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30644407/

相关文章:

javascript - 使用 Javascript 链接在 Google Universal Analytics 中进行跨域跟踪

node.js - PM2 生产优化

javascript - ajax 发布到 node.js Express 应用程序?

node.js - 在 Gulp 3.9.1 中的管道之间传递变量

javascript - 在 Node.js 中使用 Needle api 发布 HTTP-BODY 数据

node.js - 通过express js 和 bodyParser 实现安全文件上传

javascript - 如何访问由 node.js Express 创建的客户端 cookie(带有 session ID)?

javascript - 如何通过 JavaScript 发送跨域 POST 请求?

Javascript 如何使用自定义增量构建选项标签

javascript - 依次绘制 D3 路径