如何配置Node.js服务器来提供SVG文件?

时间:2018-08-01 01:52:47

标签: node.js express svg

我已经构建了一个可在两条路线上提供SVG文件的应用程序。当我在localhost时,SVG完美地显示在页面上,但是在Heroku上它是不可见的。

在网络选项卡上的Heroku上,它表明SVG返回的是“文本/ html”类型,而不是“ svg + xml”。我不知道为什么在Heroku上而不是在本地对文件进行误解。我希望对为什么发生一个更好的了解。

我相信我必须配置服务器以在调用它时指定svg内容类型。但是,当我的路线一次提供不同的内容类型(json,text / html等)时,该怎么办?

我是在app.js文件中还是在路由本身中设置配置?我尝试使用mime-types包。我知道这种尝试是错误的,尽管它确实在服务器中记录了正确的内容类型:

router.get('/:category/:company', (req, res, next) => {
  console.log("content type", mime.contentType(path.extname('../src/app/images/star-rating.icons.svg')));
  res.header("Content-Type", mime.contentType(path.extname('../src/app/images/star-rating.icons.svg')));

  Company.findOne({
    "companyName": req.params.company
  }, (err, company) => {
    // console.log("printing all reviews", company.reviews);
    if (!company) {
      res.status(400).json({
        message: "Can't find the company you're looking for at the moment."
      });
    } else {
      Review.find({
          '_id': {
            $in: company.reviews
          }
        })
        .populate("createdBy")
        .exec((err, review) => {
          if (err) {
            next(err);
            return;
          } else {
            res.json({
              message: "Retrieving your company",
              company: company,
              reviews: review
            });

            console.log("returning review", review);
          }
        });
    }
  });
});

我也尝试了res.setHeader,并尝试将两者都包含在res.json上方的else语句中。我一直在经历大量的S.O.问题,但似乎无法确定这个问题。对正在发生的事情和/或有效的解决方案的任何帮助或见解都是如此。该死的。赞赏。

感谢您的光临。

编辑:一些服务器代码

//Point static path to dist
app.use(express.static(path.join(__dirname, 'dist')));

//Attempt to make svg file in assets public to browser, here:
app.use(express.static(path.join(__dirname, 'src/assets/images')));


//Set our api routes
app.use('/', api);
app.use('/', auth);



//Allows the use of /server filepath when serving uploaded user images
app.use('/server', express.static(path.join(__dirname, '/server')));



//Catch all other routes and return the index file.
//Catch-all route MUST come after all other API routes have been defined.
app.get('*', (req, res) => {
  res.sendFile(path.join(__dirname, 'dist/index.html'));

});


// Get port from environment and store in Express
const port = process.env.PORT || '3000';
app.set('port', port);

// Create HTTP server
const server = http.createServer(app);

// Listen on provided port, on all network interfaces
server.listen(port, () => console.log(`API running on localhost: ${port}`));

0 个答案:

没有答案