在Node.js Express中发布和redirect

让我开始说,我是Node.js中的完全新手。 我已经阅读了很多与我的问题相关的post,但是他们要么不适合我,要么我不明白解决scheme。 目前Nodes.js对我来说是相当棘手的:/

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

我想弄清楚POST处理和redirect程序,我想我错过了一些东西,因为它不能正常工作。

我正在编写一个页面的应用程序,所以所有的页面实际上是一个页面分为几个部分。

说我有一个像这样的HTML表单(这是在login部分):

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

现在,基本上,除了读取表单的内容,我不想做任何事情,并将用户redirect到另一个页面。 我在terminal上看到表单数据被正确parsing,并且打印出用户名和密码,但是不是redirect到页面的#index部分,而是地址变为localhost / login。

有人可以说明接收邮件的全过程,提取数据和redirect用户吗?

谢谢!

你需要使用客户端JavaScript和AJAX来实现这一点。 您可以使用jquery的post方法来手动提交表单,而不是依赖<form>的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 }); }); 

更新:

或者,如果你或者其他人愿意做file upload,那么你可以使用这个代码:

  $("#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; }); 

说明

在提交表单事件时,停止默认操作。 然后我们创build一个新的formData并传递这个表单。 通过url,request-method等parameter passingajax请求

我只是复制和粘贴你的代码,一切工作完美。

基本上,你接收和处理POST数据的方式就是你这样做的。 Express.js(与bodyParser一起)将很多工作都拿走了,所以你可以简单地访问数据。

而且,redirect的工作方式与您所做的完全相同。 只有一件事:stream程redirect涉及一个状态码(302)。 这意味着首先将状态码设置为200毫无意义,因为它被.redirect(url)调用覆盖。

希望能帮助到你