节点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
转换成String
或Buffer
。 一个选项是将其string化为JSON:
response.writeHead(200, { 'Content-Type': 'application/json' }); response.end(JSON.stringify(svgs));
这是因为调用response.end()
来处理data
( svgs
)的response.end()
不接受Array
。
chunk
可以是一个string或一个缓冲区。 如果chunk
是一个string,则第二个参数指定如何将其编码为字节stream。 默认情况下,encoding
是'utf8'
。
而fs.readFile()
提供的每个svg
都是一个Buffer
,所以写svgs[0]
没有问题。