首先让我说我是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。
有人可以了解一下接收帖子,提取数据和重定向用户的整个过程吗?
谢谢!
答案 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)
调用覆盖。
希望有所帮助