向 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后
我有一个作为 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后