Javascript Node js-如何为浏览器提供多个SVG文件

Javascript Node js-如何为浏览器提供多个SVG文件,javascript,jquery,node.js,svg,Javascript,Jquery,Node.js,Svg,我不熟悉面向节点和服务器的代码,正在尝试获取存储在服务器中的多个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'));

我不熟悉面向节点和服务器的代码,正在尝试获取存储在服务器中的多个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
});

只要我只向浏览器发送一个文件(似乎是一个缓冲区实例),一切似乎都正常,但当我尝试将多个文件作为一个数组发送时,事务成功了,但返回的数据中没有任何内容。这可能与我试图发送的MIME类型有关,但我找不到如何处理它。

您必须先将
SVG
转换为
字符串或
缓冲区。一种选择是将其字符串化为JSON:

response.writeHead(200, {
     'Content-Type': 'application/json'
});
response.end(JSON.stringify(svgs));
这是因为,正在调用以处理
数据的
svgs
)不接受
数组

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


鉴于
fs.readFile()
提供的每个
svg
都是一个
缓冲区
,因此写入
svg[0]

没有问题,您可以尝试在svg中循环并分别写入它们吗?就像每个svgt{response.write(svg)}response.end()一样,您使用什么服务器端框架?对我来说,它不像express/connect。结果应该是什么样的?SVG应该在JSON数组中吗?还是作为一个字符串连接?@IzaazYunus确实按照您建议的方式工作得很好,但我最终采用了JSON stringify@hgoebl我使用的是express,可能还不是正确的推荐方式。我不确定应该使用什么格式,通常我只是被服务器端发生的所有魔法所服务。感谢您的澄清,它是这样工作的,我想我暗暗地想知道,SVG会有一种比普通字符串更有效的内置格式。AFAIK
response.end
不应该在express中使用。我遇到问题(请求挂起)并取消了所有
.end
调用。如果是JSON,
response.JSON
具有自动添加
内容类型:application/JSON
的优势。