0

connect.static によって提供されるファイルのコンテンツ タイプを に設定しようとしていますtext/plain。私はこれがうまくいくと思っていましたが、接続はまだモジュールの拡張からコンテンツタイプを検出しているようmimeです。

var connect = require("connect")

connect()
    .use(connect.static(__dirname + "/public"))
    .use(function(req, res, next) {
        res.setHeader("Content-Type", "text/plain");
    })
    .listen(process.env.PORT);

これを行う簡単な方法はありますか?たぶん、mime のインスタンスに到達する前に、connects インスタンスをいじくり回すことがありますか? または、接続静的ミドルウェアを書き直す必要がありますか?

4

2 に答える 2

2

パブリック ディレクトリ内のファイル名を制御できる場合、最も簡単な方法はファイル名が「.txt」で終わるようにすることです。これにより、MIME マップが send 関数に正しい Content-Type を提供します。

それができない場合は、デフォルトの MIME タイプを変更できます。

var connect = require("connect")

var mime = connect.static.mime;
mime.default_type = mime.lookup('text');

connect()
    .use(connect.static(__dirname + "/public"))
    .listen(process.env.PORT);

または、本当にすべてのファイルをテキスト/プレーンとして提供したい場合は、静的ミドルウェアが呼び出される前に Content-Type ヘッダーを設定するだけです。ヘッダーがまだ応答に存在しない場合にのみ追加します。

var connect = require("connect")

connect()
    .use(function(req, res, next) {
        res.setHeader("Content-Type", "text/plain");
        next();
    })
    .use(connect.static(__dirname + "/public"))
    .listen(process.env.PORT);
于 2013-08-01T08:02:28.807 に答える
0

静的ミドルウェアがリクエストを処理できない場合にのみ、次のミドルウェアが実行されます。

静的ミドルウェアがファイルを見つけた場合、それをクライアントに提供します。次のミドルウェアは実行されません。

これが、ミドルウェアが効果的でない理由です。

于 2013-08-01T07:43:36.687 に答える