向 Node 应用程序请求后调用错误回调方法

Error callback method being called after request to Node application

我有一个作为 Web 服务器运行的节点应用程序,接受一个包含文件名、文件路径和文件内容的 POST 请求。它生成文件和 returns 201 消息。

代码如下:

var http = require('http');
var fs = require('fs');

var writeFile = function(pathname, fileName, content)
{
    fs.writeFile(pathname + fileName, content, function(err) 
    {
        if(err) 
        {
            return console.log(err);
        }
        console.log("The file was saved!");
        return "";
    });
}


var handleRequest = function(request, response)
{
    try
    {
        if(request.url == "/save")
        {
            var fullBody = "";
            request.on('data', function(chunk) 
            {
                fullBody += chunk.toString();
            });


            request.on('end', function() 
            {
                value = JSON.parse(fullBody);
                var result = writeFile(value.savePath, value.fileName, value.fileText);
                response.writeHead(201, {'Access-Control-Allow-Origin': '*'});
                response.end();
            });
        }
        else
        {
            response.writeHead(200, {'Content-Type': 'text/plain', 'Access-Control-Allow-Origin': '*'});
            response.write('File Service Running');
            response.end();
        }
    }
    catch(error)
    {
        response.writeHead(500, {'Content-Type': 'text/plain', 'Access-Control-Allow-Origin': '*'});
        response.end(error);
    }
}

http.createServer(handleRequest).listen(3000);

然后我有一个网页调用此服务,如下所示:

var data = JSON.stringify({ savePath: path, fileName: fileName, fileText: xml });

    $.ajax({
        url: "http://localhost:" + port + "/save",
        type: "POST",
        crossDomain: true,
        data: data,
        dataType: "json",
        success: function (response)
        {
            handler();
        },
        error: function (xhr, status, error)
        {
            alert(status);
        }
    });

我通过节点服务进行调试,它可以毫无问题地完成所有工作。但是调用错误回调而不是成功回调

错误参数为:

xhr: { readyState:4, responseText: "File Created", status: 201, statusText: "Created" }

status: "parsererror"

error: "Unexpected end of input"

这是来自 fiddler 的请求示例:

POST http://localhost:3000/save HTTP/1.1
Host: localhost:3000
Connection: keep-alive
Content-Length: 64
Accept: application/json, text/javascript, */*; q=0.01
Origin: http://localhost:44301
X-FirePHP-Version: 0.0.6
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
DNT: 1
Referer: http://localhost:44301/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8

{"savePath":"C:\test","fileName":"14735.xml","fileText":"test"}

我做错了什么?

我试过你的例子,我通过删除

让它工作
dataType: "json"

这种行为的原因可以在 jQuery docs 中找到,因为 dataType 表示

The type of data that you're expecting back from the server.

您可以通过保留它但添加

来仔细检查
response.send('{ "test": 1 }');

发送前response.end()写入headers后