使用可以在浏览器中呈现的Node / Restify返回生成的SVG?

时间:2019-01-21 07:17:19

标签: javascript node.js svg restify

我当前正在将新的GET端点添加到现有节点(v8.11.2 )+ Restify(^ 7.6.0)服务,目的是根据查询参数生成自定义SVG。

到目前为止,我已经通过将端点发送回作为响应来返回端点在浏览器中返回svg文本:

res.send('<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="400" height="180"> <rect x="50" y="20" rx="20" ry="20" width="150" height="150" style="fill:red;stroke: black;stroke-width:5;opacity:0.5" /> </svg> ');

所以我认为这是一个内容类型的问题,并且都尝试了

res.header('Content-Type', 'image/svg');

res.header('Content-Type', 'image/svg+xml');

使用svg内容调用res.send之前,但是浏览器尝试下载图像而不是渲染图像。

我也尝试过以URL作为图像src的准系统html页面,如下所示:

<html>
  <head></head>
  <body>
    <img src="http://localhost:8080/marker/svg" alt="">
  </body>
</html>

这是一台精简的裸机服务器,仍在复制相同的问题:

var restify = require('restify');

function respond(req, res, next) {
  res.header('Content-Type', 'image/svg+xml');
  res.send('<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="400" height="180"> <rect x="50" y="20" rx="20" ry="20" width="150" height="150" style="fill:red;stroke: black;stroke-width:5;opacity:0.5" /> </svg> ');
}

var server = restify.createServer();
server.get('/', respond);

server.listen(8080, function() {
  console.log('%s listening at %s', server.name, server.url);
});

我希望能够在浏览器中直接访问localhost:8080 / api / svg并查看svg,就像我直接打开/提供svg文件一样。预先谢谢你!

1 个答案:

答案 0 :(得分:1)

使用sendRaw()而不是send()。 send()过滤您的数据内容。