【问题标题】:Node JS redirection after mysql requestmysql请求后的节点JS重定向
【发布时间】:2014-02-04 02:41:58
【问题描述】:

我正在尝试使用节点 JS 和 MySQL 做一个注册页面,除了我无法在其他页面上重定向用户之外,一切正常。它没有考虑到我的表单中的“动作”,我不能在我的 server.js 中使用 window.location 并且当我尝试时:

response.writeHead(301,
  {Location: 'index.html'}
);

我收到了永久移动错误。

所以,这是我的表格:

<form method="post" action="index.html" id="registerForm">
            <label for="username">Username</label>
            <input type="text" name="username" placeholder="Username" id="username" /><br/>

            <label for="password">Password</label>
            <input type="password" name="password" placeholder="Password" id="password" /><br/>


            <label for="password_bis">Confirmation</label>
            <input type="password" name="password_bis" placeholder="Password" id="password_bis" /></span><br/>

            <label for="language">Language</label>
            <select name="language" id="language">
               <option value="fr">Français</option>
               <option value="en">English</option>
            </select>

            <input type="submit" value="Submit" />
        </form>

这是我检索内容的js:

    $(document).ready(function(){

    $("#registerForm").submit(function (e) {
        e.preventDefault();
        $.post("http://localhost:1337", { username: $("#username").val(), password: $("#password").val(), language: $("#language").val() } );
    });
});

这是我的服务器:

var http = require('http');
var queryString = require('querystring');

var server = http.createServer( function(req, res) {
  if (req.method == 'POST') {
    var requestBody = '';
    req.on('data', function (data) {
      requestBody += data;
    });
    req.on('end', function () {
      var postData = queryString.parse(requestBody);
      if(postData.username && postData.password && postData.language)
      {
        var post  = {username: postData.username, password: postData.password, language: postData.language};
        var query = connection.query('INSERT INTO user SET ?', post, function(err, result) {
          if (err) throw err;
          else {
            res.writeHead(200, {'Content-Type': 'text/plain', 'Access-Control-Allow-Origin': '*'});
            res.end();
          } 
        });
      }
    });
  }
}).listen(1337);

var mysql = require('mysql');

var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'root',
  password : '',
  database: 'test'
});

connection.connect(function(error) {
    if (error) {
        return console.log('CONNECTION error: ' + error);
    }
});

谢谢

【问题讨论】:

  • 您通过 AJAX 提交表单,但是您希望页面重定向?您需要使用常规请求。不要通过 javascript 发送它,这会使它变得不必要的复杂。此外,您可能想查看Express.js Web 框架。它使处理 POST 请求变得更加容易。
  • e.preventDefault(); 阻止它重定向/提交,window.location 有什么问题?
  • @Greg 不幸的是,这是一个我不能使用任何框架或库的项目。
  • 你试过302 标头吗?
  • @Spokey 我不能在 server.js 中使用 window.location node.js 不知道 window.location 是什么。

标签: javascript jquery mysql html node.js


【解决方案1】:

这段代码:

$("#registerForm").submit(function (e) {
    e.preventDefault();
    $.post("http://localhost:1337", { username: $("#username").val(), password: $("#password").val(), language: $("#language").val() } );
});

应该删除。

它导致您的请求通过 AJAX 发送到服务器,并且您无法从那里重定向页面。如果您删除代码,它应该可以按预期工作。

如果您必须使用 javascript(预处理表单或其他内容),您可以通过response.send 发送要重定向到的位置,然后在 post 处理程序中使用 window.location。

您的客户端代码应如下所示:

$("#registerForm").submit(function (e) {
    e.preventDefault();
    $.post("http://localhost:1337", { 
        username: $("#username").val(), 
        password: $("#password").val(), 
        language: $("#language").val() } ).success(function(data){
            window.location = data;
        });
    });
});

您对应的服务器端代码如下所示:

res.end('index.html');

【讨论】:

  • 它使用这个: res.end(JSON.stringify({location:'index.html'}));但我重定向到:“未定义”而不是“index.html”
  • @user3198601 $.parseJSON(data).location;
  • @user3198601 差不多了,我正在考虑来自 websockets 的.send() :D 把它放在一个额外的data
  • @user3198601 那是另一种表达主义,我已经编辑了代码以在不使用 JSON 的情况下工作。
猜你喜欢
  • 2017-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-19
  • 1970-01-01
  • 2021-09-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多