Express js路由正在下载文件而不是呈现它

时间:2016-06-09 19:49:35

标签: node.js express routing

我正在尝试使用node.js和express.js在服务器端实现路由器。 我想静态地提供一个文件,但我已经将它用于我创建的index.html文件。没问题。

我的设置有大量的fileName.csp文件(即它们以.csp结尾)。无论如何,当我尝试访问浏览器中的.csp文件时(其内部只是一个.html页面 - 但服务器端语言必须将其作为.csp文件扩展名)但是当我尝试访问它时,浏览器(谷歌浏览器)下载.csp文件而不是渲染它!

我真的可以使用一些帮助,因为我对这一切都不熟悉。

允许下载.csp文件的代码行,即公开.csp文件所在目录的代码

app.use('/static', express.static('D:/CACHESYS/CSP/cah/'));
下面的

几乎就是整个代码片段

var http = require('http');
var express = require('express');
var app = express();

app.use('/static', express.static('D:/CACHESYS/CSP/cah/'));

app.listen(3000, function() {
    console.log('listening on port 3000');
})

app.get('/home', function(request, response) {
    response.end('going to /home');
})

app.get('/csp/cah/MARS.csp', function(request, response) {
    response.end('Trying to navigate to /csp/cah/MARS.csp');
})

P.S。正在下载的实际文件路径是

D:/CACHESYS/CSP/cah/fileName.csp

只是为这个问题提供更多背景信息。

感谢任何帮助

谢谢!

1 个答案:

答案 0 :(得分:1)

您需要明确说明.csp文件的内容类型。您可以使用以下行执行此操作:

express.static.mime.define({
    'text/html': ['csp']
});

虽然,如果文件是HTML文件,它应该具有.html扩展名。此外,如果您只是提供静态文件,最好使用nginxApache等HTTP服务器来实现,而不是使用Node.js。

这适用的原因是express将设置标题Content-Type: text/html。这告诉浏览器它是HTML,它应该这样渲染它。默认情况下,如果浏览器遇到无法识别的内容类型,则只需下载即可。