【问题标题】:node.js retrieve form input values sent by clientnode.js 检索客户端发送的表单输入值
【发布时间】:2011-06-04 20:05:52
【问题描述】:

我无法弄清楚为什么我无法检索 jquery ajax 调用发送的 node.js 中的表单输入值:

这里是客户端的 jQuery 代码:

$('#send-button').click(function(event) {
event.preventDefault();
var str = $('#form-contact').serialize();
$.ajax({
  type: 'POST',
  url: "contact",
  data: str,
  success: function(msg) {
    ....
  },
  error: function(XMLHttpRequest, textStatus) {
    ....
  }
})

现在在 node.js 中,我尝试检索 jQuery ajax 请求发送的数据:

var sys = require("sys"),  
    http = require("http"),  
    url = require("url"),  
    path = require("path"),  
    qs = require('querystring'),
    fs = require("fs"),

var server = http.createServer(function(request, response) { 

    .....

    path.exists(filename, function(exists) {  
        if(!exists) { 
            if (paramUri == "/contact") {

              if (request.method == 'POST') {
                var body = '';

                request.on('data', function(chunk) {
                  body += chunk;
                });

                request.on('end', function() {
                  console.log(body);
                })

              }

              response.writeHead(200, {'Content-Type': 'text/plain'});
              response.end('worked');
              return;
            }

            response.writeHead(404, {"Content-Type": "text/plain"});  
            response.write("404 Not Found\n");  
            response.end();  
            return;  
        }  

      ......
    });  
})

server.listen(8080);

但 request.on('data') 和 request.on('end') 永远不会被调用。我正在使用 node.js -v 0.2.6

【问题讨论】:

  • 我想不出任何可以通过查看代码来破坏这一点的东西,响应是否正常工作?您是否检查过是否实际添加了侦听器?如果您可以向我们提供更多信息或发布完整代码以便我们进行测试,那就太好了。 PS:你的编码风格很不一致。
  • 顺便说一句,标识符XMLHttpRequest 已经被使用(在浏览器中)。不要将其用作参数名称。改用xhr(例如)
  • @Ivo 我现在不关心编码风格,我只是在试验 node.js 并尝试解决我的问题。顺便说一句,这段代码主要来自教程。 @response 是的,它有效,客户端收到字符串“worked”

标签: jquery node.js


【解决方案1】:

您正在使用 path.exists() 这是一个异步函数。当您注册请求侦听器时,这会成为一个问题,直到您真正执行此回调。

解决方法是在执行path.exists()之前暂停请求,在回调中恢复:

...
request.pause();
path.exists(filename, function(exists) {  
    //register request listeners
    ...
    request.resume();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-01
    • 2013-02-01
    • 2017-05-07
    • 1970-01-01
    • 1970-01-01
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多