res.sendFile 절대 경로
내가 만약에
res.sendfile('public/index1.html');
그러면 서버 콘솔 경고가 표시됩니다.
특별히 추천되지 않는
res.sendfile
사용res.sendFile
대신
하지만 클라이언트 쪽에서는 잘 작동합니다.
하지만 내가 그것을 바꿀 때.
res.sendFile('public/index1.html');
오류가 발생했습니다.
유형 오류: 경로는 절대 경로이거나 루트를 지정해야 합니다.
res.sendFile
그리고.index1.html
렌더링되지 않았습니다.
나는 절대적인 길이 무엇인지 알아낼 수 없습니다.있습니다public
와 동일한 수준의 디렉터리server.js
나는 하고 있습니다.res.sendFile
처음부터server.js
나는 또한 선언했습니다.app.use(express.static(path.join(__dirname, 'public')));
내 디렉터리 구조를 추가하는 중
/Users/sj/test/
....app/
........models/
....public/
........index1.html
여기서 지정할 절대 경로는 무엇입니까?
Express 4.x를 사용합니다.
그express.static
미들웨어는 에서 분리됩니다.res.sendFile
그래서 당신의 절대적인 경로로 그것을 초기화합니다.public
디렉터리에서 아무 작업도 수행되지 않음res.sendFile
절대 경로를 직접 사용해야 합니다.res.sendFile
두 가지 간단한 방법이 있습니다.
res.sendFile(path.join(__dirname, '../public', 'index1.html'));
res.sendFile('index1.html', { root: path.join(__dirname, '../public') });
참고: __dirname
현재 실행 중인 스크립트가 있는 디렉터리를 반환합니다.당신의 경우, 그것은server.js
안에 있습니다.app/
에 접근하기 위해public
먼저 한 단계 뒤로 물러나야 합니다.../public/index1.html
.
참고:path
필요한 내장 모듈입니다.require
d 위의 코드가 작동하려면:var path = require('path');
대신 이 기능을 사용해 보십시오.
res.sendFile('public/index1.html' , { root : __dirname});
저한테는 효과가 있었어요. 근본:__publicname은 위 예제에서 server.js가 있는 주소를 가져온 다음 인덱스1.165(이 경우)에 도달하기 위해 반환되는 경로는 공용 폴더가 있는 디렉터리에 도달하는 경로입니다.
아직 나열되지 않은 대안은 단순히 사용하는 것입니다.path.resolve
별도의 문자열을 사용하거나 전체 경로와 함께 하나만 사용:
// comma separated
app.get('/', function(req, res) {
res.sendFile( path.resolve('src', 'app', 'index.html') );
});
또는
// just one string with the path
app.get('/', function(req, res) {
res.sendFile( path.resolve('src/app/index.html') );
});
(노드 v6.10.0)
아이디어 출처: https://stackoverflow.com/a/14594282/6189078
res.sendFile( __dirname + "/public/" + "index1.html" );
어디에__dirname
현재 실행 중인 스크립트의 디렉터리 이름을 관리합니다.server.js
)가 상주합니다.
다른 답변을 바탕으로 가장 일반적인 요구사항을 충족하는 방법을 보여주는 간단한 예를 다음과 같습니다.
const app = express()
app.use(express.static('public')) // relative path of client-side code
app.get('*', function(req, res) {
res.sendFile('index.html', { root: __dirname })
})
app.listen(process.env.PORT)
이것은 또한 별을 사용하고 있기 때문에 모든 요청에 대해 index.html로 응답하는 간단한 방법으로 두 배가 됩니다.*
정적(공용) 디렉터리에 없는 모든 파일을 검색합니다. 이는 웹 브라우저의 가장 일반적인 사용 사례입니다.로 변경/
루트 경로에서만 인덱스를 반환합니다.
process.cwd()
프로젝트의 절대 경로를 반환합니다.
그러면:
res.sendFile( `${process.cwd()}/public/index1.html` );
저는 이것을 시도했고 효과가 있었습니다.
app.get('/', function (req, res) {
res.sendFile('public/index.html', { root: __dirname });
});
sendFile 대신 send를 사용하면 오류가 발생하지 않습니다! 이 작업이 도움이 될 것입니다!
fs.readFile('public/index1.html',(err,data)=>{
if(err){
consol.log(err);
}else {
res.setHeader('Content-Type', 'application/pdf');
사용자의 응답이 PDF 유형임을 브라우저에 알리기 위해
res.setHeader('Content-Disposition', 'attachment; filename='your_file_name_for_client.pdf');
사용자가 파일을 다운로드한 후 동일한 페이지에서 즉시 열기를 원한다면 위의 코드에 첨부파일 대신 'http://filename'이라고 씁니다.
res.send(data)
코드를 적게 작성하여 이를 수행하는 다른 방법입니다.
app.use(express.static('public'));
app.get('/', function(req, res) {
res.sendFile('index.html');
});
한 번 설정하여 모든 곳에서 사용하려면 자신만의 미들웨어를 구성하면 됩니다.앱을 설정할 때 다음을 사용하여 응답 개체에 새 기능을 정의합니다.
app.use((req, res, next) => {
res.show = (name) => {
res.sendFile(`/public/${name}`, {root: __dirname});
};
next();
});
그런 다음 다음과 같이 사용합니다.
app.get('/demo', (req, res) => {
res.show("index1.html");
});
노드를 사용합니다.Js와 같은 문제가 있었습니다...모든 스크립트의 시작 부분에 '/'를 추가하고 css static 파일로 연결하는 것만으로 해결했습니다.
이전:
<link rel="stylesheet" href="assets/css/bootstrap/bootstrap.min.css">
이후:
<link rel="stylesheet" href="/assets/css/bootstrap/bootstrap.min.css">
다음은 저에게 효과가 있었습니다.
res.sendFile(path.resolve(__dirname,'./path_to_file_from_current_directory'));
나를 위해 일한 것:
res.sendFile("./public/filename.ext", { root: "./" });
언급URL : https://stackoverflow.com/questions/25463423/res-sendfile-absolute-path
'programing' 카테고리의 다른 글
레일 위의 루비에서 데이터베이스 트랜잭션 내에 이미 있는지 확인하는 방법은 무엇입니까? (0) | 2023.08.29 |
---|---|
파이썬: mysqldb를 사용하여 MySQL 테이블을 사전으로 가져오시겠습니까? (0) | 2023.08.29 |
node.js, 오류: 'express' 모듈을 찾을 수 없습니다. (0) | 2023.08.29 |
CSS를 사용하여 요소 앞에 줄 바꿈을 삽입하는 방법 (0) | 2023.08.29 |
Swift: UICollection을 새로 고치는 방법장치 회전 후 레이아웃 보기 (0) | 2023.08.29 |