몇 가지 경로로 매우 간단한 Express 앱을 만들고 있습니다. 제 질문은 앱의 기능에 관한 것이 아니라 특급 경로의 이상한 행동에 관한 것입니다.일부 잘못된 MIME 유형이 "TypeError"를 트리거하고 다른 유효하지 않은 MIME 유형이 오류를 우회하고 무제 다운로드를 트리거합니까?
나는 서버를 시작하고 /search/*
경로 나 매개 변수에 소요 어떤 경로를 사용하고, 나는 응답이 네 가지 컨텐츠 유형 중 하나를 적용 할 때 :
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"라는 파일이 다운로드됩니다. 이제이 네 가지 유형 중 어느 것도 실제 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');
을
일부 잘못된 유형이 오류를 유발하고 다른 잘못된 유형이 오류를 우회하여 다운로드를 트리거하는 이유는 무엇입니까?
내가 지금까지 발견 한 무엇 :
내가 익스프레스 4.x의 워드 프로세서에서 발견 res.download(path [, filename])
전송하여 AS 경로에서 파일 "첨부 파일"일반적으로 다운로드에 대한 사용자 메시지를 표시합니다, 그러나이 다운로드는 프롬프트되거나 의도적 인 것이 아닙니다.
경로를 실행하면 파일이 자동으로 컴퓨터로 다운로드되는 Express 문서 (또는 여기에있는 SO)에서 이와 같은 상황을 찾을 수 없습니다. 내가 res.send(typeof(res));
다운로드를 일으키는 라인을 생각 처음
하지만, 한 번에 라인을 주석 처리하고 서버를 다시 실행 한 후, 나는 콘텐츠 형식이 '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
- 오전 익스프레스 초보자
- 내 REPO는, 당신은 아마 이후로 기본을 이동하는 '/'경로를 필요 당신이 당신의 경로를 정의하는 순서가 명시 적으로 많은 문제
저기있다! 나는 읽고 있던 문서에서 "application/octet-stream"을 알아 차렸고 어떤 타입이 추측되고 있는지 추측하고 있었다. 그러나 이것이 내가 놓친 부분이었다. 정말 고맙습니다. –