javascript - Node js - 如何将多个 SVG 文件提供给浏览器

标签 javascript jquery node.js svg

我是 Node 和面向服务器代码的新手,正在尝试获取存储在服务器中的多个 svg 文件。

这是我使用 jQuery 的客户端代码:

$.ajax({
  url: someURL,
  data: someData
})
.done(function(data) {
  console.log('data got', data);
  callback(null, data);
})
.fail(function() {
  callback(new Error('Cannot access files'));
});

这是我的代码服务器端:

// links is an array of links to the different svg files
var svgs = [];
async.eachSeries(links, function(link, next) {
  fs.readFile(link, function(err, svg) {
    svgs.push(svg);
    next(err);
  });
}, function(err) {
  if (err) {
    response.writeHead(500);
    response.end(JSON.stringify(err));
    return;
  }
  response.writeHead(200);
  response.end(svgs); // Doesn't work
  // response.end(svgs[0]); // Works
});

只要我只向浏览器发送一个文件(这似乎是一个 Buffer 实例),一切似乎都工作正常,但是当我尝试将多个文件作为数组发送时,交易成功但我什么也没有返回的数据。这可能与我尝试发送的 MIME 类型有关,但我找不到如何处理它。

最佳答案

您必须先将 svgs 转换为 StringBuffer。一种选择是将其字符串化为 JSON:

response.writeHead(200, {
     'Content-Type': 'application/json'
});
response.end(JSON.stringify(svgs));

这是因为response.write() ,这response.end()正在调用以处理数据 (svgs),不接受Array

chunk can be a string or a buffer. If chunk is a string, the second parameter specifies how to encode it into a byte stream. By default the encoding is 'utf8'.

fs.readFile() 提供的每个 svg 都是一个 Buffer,因此写入 svgs[0 ]

关于javascript - Node js - 如何将多个 SVG 文件提供给浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22415678/

相关文章:

mysql - 如何使用 Sequelize 获取位于两列之间的日期/时间,包括开始日期和结束日期

Node.js 和 Apache : connection issues

javascript - 如何将此ajax代码更改为长轮询

javascript - 使用 Ajax 从 C# 检索二进制数据

javascript - jQuery :contains search for specific text

javascript - 为什么 $(document).on(..) 可以放在页面上的任何位置,而 $ (".cl").on(..) 必须放在 $(document).ready 回调中或 <body> 之后?

php - blueimp 文件上传服务器端使用 PHP 的进度

javascript - 使用 React 获取推文

javascript - grunt 复制将构建文件夹移动到项目之外

javascript - 获取一系列 Sequelize Promise 的最终结果