当前位置: 首页 > 知识库问答 >
问题:

node.js中的奇怪行为

暨曾笑
2023-03-14

我在http://www.nodebeginner.org上读了一篇教程,我在数据输出中有一个奇怪的行为。我知道,Stackoverflow也有类似的问题,但没有答案。所以我有这个Web-Server的代码:

//server.js
var http = require('http')
var url = require('url')

function start(route, handle) {
    function onRequest(request, response) {
        var postData = ""
        var pathname = url.parse(request.url).pathname
        console.log("Request for " + pathname + " recieved.")

        request.setEncoding('utf8')
        request.addListener("data", function(postDataChunk) {
            postData += postDataChunk
            console.log("Recieved POST data chunk '" + postDataChunk +"'.")
        })

        request.addListener("end", function() {
            route(handle, pathname, response, postData)
        })
        var content = route(handle, pathname, response)
    }

    http.createServer(onRequest).listen(80, '192.168.1.34')
    console.log("Server has started")
}

exports.start = start

调用RequestHandler.Upload的Router.js代码-我的buggy函数

//router.js
function route(handle, pathname, response, postData) {
    console.log("About to route a request for " + pathname)
    if (typeof handle[pathname] === 'function') {
        handle[pathname](response, postData) //calls requestHandler.upload 
    } else {
        console.log("No request handler found for " + pathname)
        response.writeHead(404, {'Content-Type' : 'text/plain'})
        response.write("404 Not found")
        response.end()
    }
}

和RequestHandler.Upload的代码

//requestHandler.js
function upload(response, postData) {
    console.log("Request handler 'upload' was called with POST data: " + postData); //works fine
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write("You've sent: " + postData); //works ugly
    response.end();
}

假设POST数据中有一个字符串text=123。该函数的第一行输出真实数据,如“request handler'upload'was calling with POST data:text=123”。但是,这行response.write(“you ave sent:”+postData);在浏览器中输出下一条消息:you ave sent:undefined。我做错了什么?

共有1个答案

南门新荣
2023-03-14

server.js中的代码中,行:

var content = route(handle, pathname, response)

“end”事件侦听器中的调用之前首先运行,执行函数但省略postdata参数。它运行...

response.write("You've sent: " + postData);
response.end();

因此,发送回浏览器的响应是:

You've sent: undefined

随后将触发“end”事件,事件侦听器调用...

route(handle, pathname, response, postData)

它正确地传递postdata并将其正确地输出到控制台。对response.write(...)的调用不会第二次回发到浏览器,因为此时的响应已经结束。

我希望这能解释问题所在。

var content = route(handle, pathname, response)
 类似资料:
  • 我有以下代码来解析一个JSON文件: 要处理以下JSON文件: 如果我执行此代码,我将收到以下错误: 所以我开始一步一步地调试应用程序,看看part processing()中的哪个代码部分抛出了这个异常。令人惊讶的是,那里的所有代码都正常执行:没有抛出异常,也没有返回结果I except。 更让我惊讶的是,当我稍微改变第一种方法的代码时,它可以在不产生异常的情况下工作。 我不知道println方

  • 我正在编写一个DocumentFilter,它将输入JTextField的所有单词“top”替换为逻辑top符号。 使用此代码很好,但是它很烦人,因为用户必须重新键入他们的空间,他们可以这样做,并且文本继续在同一行上 当用户继续键入文本时,使用此代码并在空格中添加替换符会导致顶部符号和JTextField中的所有文本稍微向上推,然后转到下面并开始一行新的内容 有人能解释一下这种行为,并希望能提供一

  • 我在做Maven项目。我用log4j做了一个日志。但它在给定的文件中显示了一些starnge日志。我试图理解,为什么会出现这种奇怪的日志,但我不明白。请帮助我,为什么这些不需要的行会进入日志文件。 请帮我把这个拿开。 log.properties 我通过阅读这个链接创建了这个文件。 代码是 日志txt-(log.txt的一些起始行)

  • 使用方式如下: 这是有效的解决方案吗?如果删除未使用的“魔术”变量 - 我在返回字符串后有分割错误。做错了什么? $gcc--version gcc(Debian 4.4.5-8)4.4.5 $uname-Linux深度站(挤压)2.6.32-5-686#1 SMP 5月10日星期五08:33:48 UTC 2013 i686 GNU/Linux

  • 问题内容: 我在GregorianCalendar类中遇到一个奇怪的行为,我想知道我是否真的做得不好。 仅当初始化日期的月份的实际Maximum大于我将日历设置为的月份时,才追加此值。 这是示例代码: 我知道问题是由于日历初始化日期是31天(可能是5月),与设置为2月(28天)的月份混淆了。修复很容易(只需在设置年和月之前将day_of_month设置为1),但是我想知道这确实是想要的行为。有什么

  • 问题内容: 我正在为一个问题而苦苦挣扎,我不明白为什么它不起作用。如何通过将变量传递并转换为? 为什么在顶部代码段中不起作用,但在行下方的底部代码段中起作用? 唯一的区别似乎是添加了一个额外的变量,该变量也被键入为? 问题答案: 该是一种原始类型,同时是一个普通的Java类。您不能在原始类型上调用方法。但是该方法在上可用,如javadoc中所示 有关这些原始类型的更多信息,请参见此处