mah*_*off 18 javascript connect node.js mime-types express
我知道Express有res.contentType()方法,但是如何根据路径/文件(包括静态内容)自动设置内容类型?
And*_*lau 37
此外,如果您想扩展表达(连接)所知道的mime类型,您可以这样做
express.static.mime.define({'text/plain': ['md']});
Run Code Online (Sandbox Code Playgroud)
要么
connect.static.mime.define({'text/plain': ['md']});
Run Code Online (Sandbox Code Playgroud)
PS:mime模块现在位于https://github.com/broofa/node-mime
Mic*_*ley 15
该Express文档表明,如果你在文件名通过它可以做到这一点.
var filename = 'path/to/image.png';
res.contentType(filename);
// Content-Type is now "image/png"
Run Code Online (Sandbox Code Playgroud)
[编辑]
这是一个示例,它提供来自相关目录的文件,static
并根据提供的文件自动设置内容类型:
var express = require('express');
var fs = require('fs');
var app = express.createServer();
app.get('/files/:file', function(req, res) {
// Note: should use a stream here, instead of fs.readFile
fs.readFile('./static/' + req.params.file, function(err, data) {
if(err) {
res.send("Oops! Couldn't find that file.");
} else {
// set the content type based on the file
res.contentType(req.params.file);
res.send(data);
}
res.end();
});
});
app.listen(3000);
Run Code Online (Sandbox Code Playgroud)
Connect将自动设置内容类型,除非您自己明确设置.这是完成它的片段.它使用mime.lookup和mime.charsets.lookup
// mime type
type = mime.lookup(path);
//<SNIP>....
// header fields
if (!res.getHeader('content-type')) {
var charset = mime.charsets.lookup(type);
res.setHeader('Content-Type', type + (charset ? '; charset=' + charset : ''));
}
Run Code Online (Sandbox Code Playgroud)
如果这不适合您,请发布您的代码,因为您的自定义代码可能会以某种方式干扰默认行为.
Express 使用 Connect,Connect 使用 Mime,Mime 包括文件mime.types(具有来自 Apache 的默认 mime 类型)和node.types(具有节点社区贡献的一些其他类型)。您可以在 node_modules 中的 mime 副本中自定义这些文件之一,以添加所需的内容类型,或者 Mime 也有一个 API,可让您指定要从代码加载的其他内容类型或 .types 文件。
https://github.com/broofa/node-mime
归档时间: |
|
查看次数: |
39176 次 |
最近记录: |