javascript - 文本/纯文件下载的 Angular http$ 响应失败,出现 SyntaxError : Unexpected number in JSON

标签 javascript angularjs node.js http get

我已经根据以下解决方案在基于 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/

相关文章:

javascript - 将 MP3 添加到 jquery 中作为背景音乐

javascript - 无法理解这个例子是如何工作的。 lastIndexOf() 方法

javascript - Nodejs 中的无效正则表达式

javascript - Firebase Init 第二次只创建 2 个文件

javascript - node.js、express.js 和 mysql - 无法读取未定义的属性 'status'

javascript - 隐藏元素还是即时创建?

javascript - 如何使用 React.js 调用从 Grid 读取的 kendo ui 数据源

angularjs - ZeroClipboard + angular,多个实例

javascript - Angularjs:在匿名函数内的模块上注入(inject) Controller

AngularJS 在 PDT/PST 中显示时间