将url参数写入文件会导致“未定义”

时间:2012-12-16 14:40:37

标签: javascript node.js

我刚刚开始使用node.js(以及整个函数回调范例),我遇到了一个奇怪的问题。请考虑以下代码:

var http = require("http");
var myPackage = require("./myPackage.js");  //Custom package

http.createServer(function(request, response)
{
    request.on("end", function()
    {
        //This custom package method retrieves the GET params from the URL
        //and then calls the callback with the params object as argument
        myPackage.getUrlParams(request, function(urlParams)
        {
            response.writeHead(200, {"Content-Type": "text/plain"});

            //This works - it shows me the content of the "data" url parameter,
            //so myPackage.getUrlParams works fine
            response.write("data: " + urlParams.data + ".  ");

            //This does not work - the test file is created with the right 
            //extension in the right place (handled by myPackage) but the 
            //content is "undefined"
            myPackage.toFile("test", urlParams.data);

            //This works - so myPackage.toFile seems to be fine
            myPackage.toFile("test", "Hello World");

            //This obviously works fine
            response.end("Done.");
        });
    });
}).listen(8080);

出于某种原因,我可以将字符串写入文件,但不能写入url参数的内容(这是一个简单的字符串,没有特殊的字符,空格等)。但是,我可以毫无问题地将该url参数写入屏幕。进一步测试(并将测试结果写入文件)给了我以下额外信息:

  • myPackage.toFile(“test”,typeof urlParams);写下“对象”
  • urlParams不为null或未定义
  • for(var i in urlParams)返回无结果,即使首先调用response.write

我认为这将是某种异步的事情,我的函数被调用得太早(而response.write不是,即使它之前被调用),但是我希望urlParams是未定义的而不是对象。

任何人都可以对此有所了解吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

我也是node.js的新手,但我认为因为您的数据是一个对象,您可以尝试将其传递给util.inspect()以将其转换为字符串,例如:

var util = require('util');

...

myPackage.toFile("test", util.inspect(urlParams.data));

不确定,试一试让我们知道。 Console.log会自动将对象展平为字符串,但toFile()可能不会。