Javascript Node js-如何为浏览器提供多个SVG文件
我不熟悉面向节点和服务器的代码,正在尝试获取存储在服务器中的多个svg文件 下面是我使用jQuery的客户端代码: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'));
$.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会有一种比普通字符串更有效的内置格式。AFAIKresponse.end
不应该在express中使用。我遇到问题(请求挂起)并取消了所有.end
调用。如果是JSON,response.JSON
具有自动添加内容类型:application/JSON
的优势。