如何在Node.js的发送文件之前设置一个MIME类型?(How do I set a MIME t

2019-06-27 01:37发布

当发送从我的Node.js服务器脚本的浏览器,谷歌浏览器,我得到这样的警告:

资源解释为脚本,但与MIME类型文本/无格式传送

我Google'd四周,发现这是一个服务器端的问题,即,我想我应该设置正确的MIME类型的东西,送他们。 这里的HTTP服务器的处理程序:

var handler = function(req, res)
{
    url = convertURL(req.url); //I implemented "virtual directories", ignore this.

    if (okURL(url)) //If it isn't forbidden (e.g. forbidden/passwd.txt)
    {
        fs.readFile (url, function(err, data)
        {
            if (err)
            {
                res.writeHead(404);
                return res.end("File not found.");
            }

            //I think that I need something here.
            res.writeHead(200);
            res.end(data);
        });
    }
    else //The user is requesting an out-of-bounds file.
    {
        res.writeHead(403);
        return res.end("Forbidden.");
    }
}

问: 如何纠正我的服务器端代码,以正确配置MIME类型?

(注:我已经找到https://github.com/broofa/node-mime ,但它只是让我确定MIME类型,而不是“套”了。)

Answer 1:

我想到了!

感谢@ rdrey的链接和这个节点模块我设法正确设置MIME类型的响应,这样的:

function handler(req, res) {
    var url = convertURL(req.url);

    if (okURL(url)) {
        fs.readFile(url, function(err, data) {
            if (err) {
                res.writeHead(404);
                return res.end("File not found.");
            }

            res.setHeader("Content-Type", mime.lookup(url)); //Solution!
            res.writeHead(200);
            res.end(data);
        });
    } else {
        res.writeHead(403);
        return res.end("Forbidden.");
    }
}


Answer 2:

谷歌搜索的Content-Type HTTP头。

然后找出如何用它设置http://expressjs.com/api.html#res.set

哎呀,示例包括你的答案;)

只需选中结尾的文件,如果它的.js ,设置相应的MIME类型,使浏览器的快乐。

编辑:如果这是纯粹的节点上,没有明示,请看这里: http://nodejs.org/api/http.html#http_response_setheader_name_value



Answer 3:

我一直在使用,因为其中没有定义convertURL和okURL功能的处理函数的问题。 我修改了代码一点,成品看起来像这样

function handler(req, res) 
{
    // /home/juan/Documentos/push-api-demo is the path of the root directory of the server
    var url             = '/home/juan/Documentos/push-api-demo' + req.url;
    var file_exists     = fs.existsSync(url);

    if (file_exists) 
    {
        fs.readFile(url, function(err, data) 
        {
            if (err) 
            {
                res.writeHead(404);
                return res.end("File not found.");
            }

            res.setHeader("Content-Type", mime.lookup(url)); 
            res.writeHead(200);
            res.end(data);
        });
    } 
    else 
    {
        res.writeHead(403);
        return res.end("Forbidden.");
    }
}


Answer 4:

mime.lookup()现在改名为mime.getType() 所以,你可以这样做:

res.set('Content-Type', mime.getType('path/file'));

https://www.npmjs.com/package/mime



文章来源: How do I set a MIME type before sending a file in Node.js?