私はいくつかのルートでかなり簡単なエクスプレスアプリを作っています。私の質問は、アプリケーションの機能についてではなく、Expressルートの動作の奇妙なビットについてです。一部の無効なMIMEタイプが "TypeError"を引き起こし、他の無効なMIMEタイプがエラーをバイパスして、プロンプトされないダウンロードをトリガーするのはなぜですか?
私はサーバを起動し、/search/*
ルート、またはパラメータにとる任意の経路を使用して、私が応答にこれらの4つのコンテンツ・タイプのいずれかを適用します。
res.setHeader('content-type', 'plain/text');
res.setHeader('content-type', 'plain/html');
res.setHeader('content-type', 'html/plain');
res.setHeader('content-type', 'html/text');
パラメータはプロンプトなしでファイルとしてダウンロードされます。したがって、search/foobar
を使用すると、サイズが6バイトで、サポートされていないファイルタイプの "foobar"という名前のファイルがダウンロードされます。今私は、これらの4つのタイプのどれも実際のMIMEタイプではないことを理解しています。text/plain
またはtext/html
のいずれかを使用する必要がありますが、ダウンロードはなぜですか?これら二つのMIMEタイプは、彼らが必要のように振る舞い、そして彼らが必要のような形で次のMIMEタイプが、ノーサブタイプすべてが失敗し、彼らはすべてのTypeError: invalid media type
のエラーを返す:
res.setHeader('content-type', 'text');
res.setHeader('content-type', 'plain');
res.setHeader('content-type', 'html');
いくつかの無効なタイプがエラーを引き起こし、他の無効なタイプがエラーを回避してダウンロードをトリガーするのはなぜですか?私がこれまでに出て見つけた何
:
を私は、res.download(path [, filename])
は「添付ファイル」としてパスでファイルを転送し、通常はダウンロードのためにユーザーに要求することExpressの4.xのドキュメントで見られますこのダウンロードは促されも意図的でもありません。
ルートを実行しているファイルが自動的にコンピュータにダウンロードされたExpressドキュメント(またはここではSO)では、このような状況は見つかりませんでした。
は、最初に私はラインres.send(typeof(res));
がダウンロードを引き起こしていたと思ったが、一度にライン1をコメントアウトして、サーバーを再実行した後、私は、コンテンツタイプが'plain/text'
に設定されている場合のみ、ダウンロードをしていることを把握することができました起こる。 res.send()
の内容に関係なく、content-typeがplain/textの場合、/search/
の後のテキストが自分のマシンにダウンロードされます。ルートを再配置
が(それは、ダウンロードを除く必要があるとして、すべてが働いていた。)
同じ結果に到達したアプリはちょうどどんなルートでハング/search/foo
前に達したが、ダウンロードはまだ伝わってくるました。
マイコード:Cloud9
'use strict';
var express = require('express');
var path = require('path');
var app = express();
app.get('/', function (req, res) {
res.sendFile(path.join(__dirname+'/index.html'));
});
app.get('/search', function(req,res){
res.send('search route');
});
app.get('/search/*', function(req, res, next) {
res.setHeader('content-type', 'plain/text');
var type = typeof(res);
var reqParams = req.params;
res.send(type);
});
var server = app.listen(process.env.PORT || 3000, function(){
console.log('app listening on port ' + process.env.PORT + '!');
});
module.exports = server;
その他の詳細
- Expressバージョン4.15.2
- ノードバージョン4.7.3
- 私のレポは「so_questionは、」あなたはあなたのルートを定義する順序は特急で多くのことを重要、あなたはおそらく 'の後であるためにあなたのデフォルトの「/」ルートを移動する必要がある枝の下で、
それがあります!私は読んでいたドキュメンテーションで "application/octet-stream"に気付き、返されているタイプについて何らかの推測が行われていると思っていましたが、これは欠けていたものでした。どうもありがとうございます。 –