Express res.send 파일 던지기 금지 오류
다음 코드가 있습니다.
res.sendfile( '../../temp/index.html' )
그러나 다음 오류가 발생합니다.
Error: Forbidden
at SendStream.error (/Users/Oliver/Development/Personal/Reader/node_modules/express/node_modules/send/lib/send.js:145:16)
at SendStream.pipe (/Users/Oliver/Development/Personal/Reader/node_modules/express/node_modules/send/lib/send.js:307:39)
at ServerResponse.res.sendfile (/Users/Oliver/Development/Personal/Reader/node_modules/express/lib/response.js:339:8)
at exports.boot (/Users/Oliver/Development/Personal/Reader/server/config/routes.js:18:9)
at callbacks (/Users/Oliver/Development/Personal/Reader/node_modules/express/lib/router/index.js:161:37)
at param (/Users/Oliver/Development/Personal/Reader/node_modules/express/lib/router/index.js:135:11)
at pass (/Users/Oliver/Development/Personal/Reader/node_modules/express/lib/router/index.js:142:5)
at Router._dispatch (/Users/Oliver/Development/Personal/Reader/node_modules/express/lib/router/index.js:170:5)
at Object.router (/Users/Oliver/Development/Personal/Reader/node_modules/express/lib/router/index.js:33:10)
at next (/Users/Oliver/Development/Personal/Reader/node_modules/express/node_modules/connect/lib/proto.js:199:15)
왜 그런지 누가 말해줄 수 있나요?
저는 그것이 상대적인 경로 때문이라고 믿습니다; "...악의적인 것으로 간주됩니다.로컬 경로를 먼저 확인한 다음 호출res.sendfile
다음을 사용하여 경로를 해결할 수 있습니다.path.resolve
사전에
var path = require('path');
res.sendFile(path.resolve('temp/index.html'));
이 답변은 다른 답변/댓글의 정보를 함께 수집합니다.
프로세스 작업 디렉터리(cwd)와 관련된 항목을 포함할지 파일 디렉터리를 포함할지 여부에 따라 다릅니다.둘 다 사용합니다.path.resolve
함수(put)var path = require('path')
파일 맨 위에 있습니다.
- cwd에 대한 상대:
path.resolve('../../some/path/to/file.txt');
- 파일 기준:
path.resolve(__dirname+'../../some/path/to/file.txt');
@Joe의 코멘트 링크를 읽어보면, 경로에 대한 사용자 입력(예: 사용자 입력)을 수락하면 상대 경로가 보안 위험인 것).sendfile('../.ssh/id_rsa')
해커의 첫 번째 시도일 수 있음).
Express 문서는 다른 방법으로 실행할 것을 제안하며, 현재 솔루션보다 나중에 실행하는 것이 더 타당하다고 생각합니다.
res.sendFile('index.html', {root: './temp'});
루트 옵션이 설정된 것 같습니다../
프로젝트의 루트 디렉터리로 사용할 수 있습니다.그래서 나는 당신이 프로젝트 루트와 관련하여 어디에 파일이 있는지 완전히 알 수 없지만, 만약 당신의 임시 폴더가 그곳에 있다면, 당신은 설정할 수 있습니다../temp
전송하는 파일의 루트로 사용됩니다.
또한 사용할 수 있습니다.path.join
const path = require("path");
router.get("/", (req, res) => {
let indexPath = path.join(__dirname, "../public/index.html");
res.sendFile(indexPath);
});
언급URL : https://stackoverflow.com/questions/14594121/express-res-sendfile-throwing-forbidden-error
'programing' 카테고리의 다른 글
항목이 없으면 만들고, 없으면 업데이트하시겠습니까? (0) | 2023.09.02 |
---|---|
MySQL 하위 문자열 빈 값 반환 (0) | 2023.09.02 |
Junit에서 @AutoWired 주석과 함께 @InjectMocks를 사용하는 방법 (0) | 2023.09.02 |
.NetCore MariaDb Dapper - 저장 프로시저를 실행하는 방법? (0) | 2023.09.02 |
PHP/HTML 혼합 코드를 올바르게 들여쓰는 방법은 무엇입니까? (0) | 2023.08.28 |