0

我写了一个基于 express.js 的小型网络应用程序。我提供 manifest.webapp 但 express.js 没有发送正确的 mime 类型。但是因为 express.js 捆绑了 mime 模块require("mime").define(...),所以没有效果。它定义了错误模块的 mime 类型!

有没有办法访问与 express.js 捆绑的 mime 模块?或者有没有办法告诉 npm(和 nodejitsu)不要使用 express.js 的捆绑模块?

4

2 回答 2

0

我发现您可以通过这种方式访问​​捆绑的模块:

require("express/node_modules/mime").define({
    'application/x-web-app-manifest+json': ['webapp']
});

我不知道这是否是正确的方法,但我现在使用它。

于 2012-06-14T15:50:19.117 回答
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方法。

于 2012-06-07T14:37:49.457 回答