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

时间:2014-03-14 21:03:02

标签: 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类型有关,但我找不到如何处理它。

1 个答案:

答案 0 :(得分:2)

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

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

这是因为response.write()response.end()正在调用以处理datasvgs),并不接受Array。< / p>

  

chunk可以是字符串或缓冲区。如果chunk是字符串,则第二个参数指定如何将其编码为字节流。默认情况下,encoding'utf8'

svg提供的每个fs.readFile()都是Buffer,因此编写svgs[0]时没有问题。