0

私は小さなexpress.jsベースのWebアプリを作成しました。私はmanifest.webappを提供していますが、express.jsは正しいmimeタイプを送信しません。ただし、express.jsにはmimeモジュールrequire("mime").define(...)がバンドルされているため、効果はありません。間違ったモジュールのmimeタイプを定義します!

express.jsにバンドルされているmimeモジュールにアクセスする方法はありますか?または、express.jsのバンドルされたモジュールを使用しないようにnpm(およびnodejitsu)に指示する方法はありますか?

4

2 に答える 2

0

これを修正するには2つの方法があると思います。

単純なミドルウェアを使用する

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 に答える
0

この方法でバンドルされたモジュールにアクセスできることがわかりました。

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

これが適切な方法かどうかはわかりませんが、今はこれを使用しています。

于 2012-06-14T15:50:19.117 に答える