我已经构建了一个可在两条路线上提供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}`));