我已经根据以下解决方案在基于 Angular 的客户端和 node.js 后端实现了下载文件功能:https://stackoverflow.com/a/20904398/1503142 .一般来说,这是可行的,但有时我会收到“语法错误:位置 x 处 JSON 中的意外数字”以及“类型错误:无法读取未定义的属性‘消息’”。
一些观察:
- 一切似乎都在 Node 服务器端工作,因为我总是在客户端得到响应。有问题的错误是由客户报告的;服务器未报告任何错误。
- 日志文件包含时间戳,然后是基本日志信息文本。文本可以包含 ASCII 字符
- 使用 Postman,响应每次都能正常工作,这使我们认为响应可能存在问题的是 http$ 代码。 Postman的响应Header信息表明响应是Content-Type->text/plain;字符集=utf-8。
- 我正在使用 AngularJS v1.2.21 和 Node v0.12.13
这是客户端代码:
$http({
method: 'GET',
url: "/api/logging/logfiles/" + logFile,
headers: { 'Content-Type': 'text/plain;charset=utf-8' }
}).
success(function (data, status, headers, config) {
var anchor = angular.element('<a/>');
anchor.attr({
href: 'data:text/plain;charset=utf-8,' + encodeURIComponent(data),
target: '_blank',
download: logFile
})[0].click();
}).
error(function (data, status, headers, config) {
console.log('Hence my visit to StackOverflow!')
});
服务器端代码如下:
app.get('/api/logging/logfiles/:logfile', function (req, res, next) {
logDirectory = './log';
fs.readFile(logDirectory + "/" + req.params.logfile, 'utf8', function (err, data) {
if (err) {
res.send("Something broke!");
}
else {
res.set({ 'Content-Type': 'text/plain; charset=utf-8' });
res.send(data);
}
});
});
我怀疑这与日志文件的内容有关。既然指定了text/plain content,为什么会出现JSON解析错误?
最佳答案
试试这个:
app.get('/api/logging/logfiles/:logfile', function (req, res, next) {
logDirectory = './log';
res.sendFile(logDirectory + "/" + req.params.logfile);
});
关于javascript - 文本/纯文件下载的 Angular http$ 响应失败,出现 SyntaxError : Unexpected number in JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37758799/