节点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实例),一切似乎工作正常,但是当我尝试发送多个作为一个数组的事务成功,但我没有在我的返回数据。 这可能与我试图发送的MIMEtypes有关,但是我找不到如何处理它。

你必须首先将svgs转换成StringBuffer 。 一个选项是将其string化为JSON:

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

这是因为调用response.end()来处理datasvgs )的response.end()不接受Array

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

fs.readFile()提供的每个svg都是一个Buffer ,所以写svgs[0]没有问题。