【问题标题】:Object becomes undefined in node.js simple server对象在 node.js 简单服务器中变得未定义
【发布时间】:2013-01-18 13:45:36
【问题描述】:

好的,所以当我运行这个服务器时:

var net = require('net');

var server = net.createServer(function (data) {
    console.log("Hello " + data.name);
});

server.listen(1337, '127.0.0.1');

然后在 chrome 上浏览此页面(来自文件,而不是域):

<!DOCTYPE html>
<html lang="en">
    <head>
        <script type="text/javascript" src="jquery.js"></script>
        <script type="text/javascript">
            var data = new function(){
                this.name = "John";
            };

            $.post('http://127.0.0.1:1337/', data);
        </script>
    </head>
    <body>

    </body>
</html>

我在我的服务器上得到以下输出:

Hello undefinied

我的问题是,为什么我的数据对象的名称在我将它发送到服务器时变得未定义?


编辑:所以我将服务器更改为:

var http = require('http');

var server = http.createServer(function (data) {
    console.log("Hello " + data.name);
});

server.listen(1337, '127.0.0.1');

并将我客户的脚本更改为:

var data = {
                name: "John"
            };
            $.post('http://127.0.0.1:1337/', data);

但我仍然遇到同样的错误。

【问题讨论】:

  • 您是否还在遵循给定的示例?昆汀举例:Scroll to bottom and you will see a sample HTTP server
  • 是什么让你觉得服务器连接回调会自动给你在客户端创建和发送的对象?
  • @Mustafa 我想要的是将对象发送到服务器,并让服务器打印出对象的值(在本例中为名称)。我不想让文字向世界打招呼。
  • 您了解 HTTP 协议吗?如果你这样做,只需阅读HTTP docs of NodeJS
  • 如果您正在寻找魔法,您将找不到它。您需要学习 API 并编写相应的代码。

标签: javascript jquery node.js


【解决方案1】:

net.connection 创建一个普通的 TCP 套接字,而不是一个 HTTP 服务器。

你想要http.createServer,而它接受作为参数的函数不会得到一个只包含提交数据的简单对象。您需要阅读http 模块的手册,了解如何处理请求对象。

有一个例子on the node.js homepage(向下滚动)。

另请参阅request eventsnode.js Extracting POST data 的 API 文档。

【讨论】:

  • data 一个简单的对象。匿名函数作为构造函数被调用,new
  • @thesystem — 这使它成为匿名构造函数的实例,而不是简单的对象。
  • 好的,我进行了更改(如我的编辑中所反映的那样),但我遇到了同样的错误。
  • @thesystem — 虽然经过测试,jQuery 似乎可以应付这个问题,所以我删除了答案的第一部分,因为它是一个红鲱鱼。 (虽然这绝对是非典型代码)
  • @CyanPrime — 您所做的只是更改为使用 http 而不是 net。这是第一步。阅读其余答案。
猜你喜欢
  • 2017-06-20
  • 2019-07-01
  • 2016-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多