在Node.js Express中发布和重定向

时间:2014-06-14 14:47:44

标签: javascript html5 node.js express

首先让我说我是Node.js的新手。我在这里阅读了很多与我的问题相关的帖子,但它们要么对我不起作用,要么我不理解解决方案。 Nodes.js对我来说非常棘手:/

所以这是我的问题/问题:

我正在试图找出POST处理和重定向程序,我想我错过了一些因为它不能正常工作。

我正在编写单页应用程序,因此所有页面实际上都是一页划分为部分。

假设我有一个像这样的HTML表单(这是在登录部分):

 <form method="post" action="/login">
    <input name="email" type="email" id="signin-mail">
    <input name="pass" type="password" id="signin-username">
    <input type="submit" value="send">
 </form>

这是我的Node.js服务器代码:

var express = require('express');
var bodyParser = require('body-parser');
var fs = require('fs');
var app = express();

app.use(bodyParser()); 

//
app.get('/login', function(req, res){
    console.log('GET /')
    var html = fs.readFileSync('index.html');
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.end(html);
});

//
app.post('/login', function(req, res){
    console.log('POST /');
    console.dir('email: ' + req.body.email +  ' pass: ' + req.body.pass);
    res.status(200).redirect("/index.html#index");
});

app.use(express.static(__dirname + '/'));

port = 8888;
app.listen(port);
console.log('Listening at http://localhost:' + port)

现在,基本上,我不想做任何事情,除了阅读表格的内容,和 将用户重定向到另一个页面。我在终端中看到表单数据已正确解析并打印用户名和密码,但不是重定向到页面的#index部分,地址更改为localhost / login。

有人可以了解一下接收帖子,提取数据和重定向用户的整个过程吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

您需要使用客户端javascript和ajax来实现此目的。您可以使用jquery的post方法手动提交表单,而不是依赖&lt; form&gt;的action属性。 像这样:

$('#myForm').submit(function(event) {
    event.preventDefault(); // Stops browser navigationg

    var dataObject;
    // build a json object, store in information to dataObject

    $.post('/login', dataObject, function(res) {
        consolel.log(res);
        // on success execute this code
    });
});

<强>更新

或者,如果您或此处的任何其他人也愿意进行文件上传,那么您可以使用以下代码:

 $("#myForm").submit(function(event){    
 event.preventDefault();

 var formData = new FormData($(this)); 

     $.ajax({
       url: 'login',
       type: 'POST',
       data: formData,
       async: false,
       cache: false,
       contentType: false,
       enctype: 'multipart/form-data',
       processData: false,
       success: function (response) {
           console.log(response);
       }
    });

   return false;
 });

<强>解释

在提交表单事件时,停止默认操作。然后我们创建一个新的formData并传递我们表单的 this 。使用url,request-method等参数传递ajax请求

答案 1 :(得分:0)

我只是复制并粘贴了你的代码,一切都很完美。

基本上,您接收和处理POST数据的方式就是您的方式。 Express.js(与bodyParser一起使用)需要花费大量的工作,因此您可以简单地访问数据。

此外,重定向的工作方式与您完成的方式完全相同。只有一件事:流程重定向涉及状态代码(302)。这意味着首先将状态代码设置为200是没有意义的,因为它被.redirect(url)调用覆盖。

希望有所帮助