我写了一个基于express.js的小型网络应用程序。我提供manifest.webapp但express.js不发送正确的mime类型。但是因为express.js捆绑了mime模块require("mime").define(...)
没有效果。它定义了错误模块的mime类型!
有没有办法访问与express.js捆绑在一起的mime模块?或者有没有办法告诉npm(和nodejitsu)不使用express.js的捆绑模块?
答案 0 :(得分:0)
我认为有两种方法可以解决这个问题。
app.get('*.webapp', function (req, res, next) {
res.header('Content-Type', 'application/x-web-app-manifest+json');
next();
});
修改响应对象并覆盖setHeader
方法,您可以在其中修改响应的实际值(它将作为中间件工作)。
var mime = require('mime');
mime.define({ 'application/x-web-app-manifest+json': [ 'webapp' ] });
app.use(function (req, res, next) {
var setHeader = res.setHeader;
res.setHeader = function (field, val) {
// you can be more strict here
if (field === 'Content-Type') {
val = mime.lookup(req.path);
}
return setHeader.call(this, field, val);
}
next();
});
app.use(express.static(__dirname + 'your-static-dir'));
因此,您将使用自己的mime模块而不是捆绑模块。
更新静态中间件未使用req.contentType
方法。
答案 1 :(得分:0)
我发现你可以通过这种方式访问捆绑的模块:
require("express/node_modules/mime").define({
'application/x-web-app-manifest+json': ['webapp']
});
我不知道这是否是正确的方式,但我现在就使用它。