2016-08-13 4 views
-1

expressjs에서 리디렉션 기능이있는 웹 페이지를 제공하려고했습니다. 그러나 어떻게 든 작동하지 않을 수 있습니다. 나는 여기 무언가에 바보가되어야한다.nodejs/expressjs 리디렉션이 작동하지 않습니다.

index.html을 :

<html> 

<body> 
    <div id="clicked"> not clicked </div> 
</body> 

</html> 

server.js :

var express = require("express"); 
var app  = express(); 

app.get('/', function(req, res) { 
    console.log("reached root!"); 
    res.redirect("index.html"); 
}); 
app.listen(9876); 

두 파일은 같은 디렉토리에 있습니다. 브라우저 콘솔에서 로그 "도달 로그"를 볼 수 있지만 404 오류가 발생했습니다 : "찾을 수 없습니다 /index.html". 그러나 외부 웹 페이지로 리디렉션하면 작동 할 수 있습니다. 내가 "res.redirect ("index.html ");" ~ "res.redirect ("http://google.com ");", 완벽하게 작동 할 수 있습니다.

+0

정적 파일을 제공하는 곳을 명시해야합니다. https://expressjs.com/en/starter/static-files.html –

답변

2

node.js는 기본적으로 모든 파일을 제공하지 않습니다. 따라서 하드 디스크에있는 파일은 상관하지 않습니다. 해당 파일을 제공 할 경로가 없으면 Express는 절대로 보내지 않습니다.

/index.html으로 리디렉션하려는 경우 해당 요청을 처리 할 경로가 필요합니다. 귀하의 서버가 지금이므로, 그 요청은 404 (경로/파일을 찾을 수 없음)를 생성합니다.

var express = require("express"); 
var app  = express(); 

app.get('/', function(req, res) { 
    console.log("reached root!"); 
    res.redirect("/index.html"); 
}); 
app.get('/index.html', function(req, res) { 
    console.log("reached root!"); 
    res.sendFile("index.html"); 
}); 
app.listen(9876); 

아마도 '리디렉션없이'index.html을 렌더링하면됩니다. 당신이 가진 하나의 경로로도 작동 할 수 있습니다.

var express = require("express"); 
var app  = express(); 

app.get('/', function(req, res) { 
    console.log("reached root!"); 
    res.sendFile("index.html"); 
}); 
app.listen(9876); 

이 예에서는 index.html 파일이 app 디렉토리에 있다고 가정합니다. 다른 위치에있는 경우 sendFile()의 경로를 적절하게 조정해야합니다.

정적 파일의 경우 express.static()을 사용하여 파일의 전체 디렉터리를 자동으로 제공 할 수도 있습니다. 자세한 내용은 express.static() doc을 참조하십시오.

+0

나는 당신을 이해하지 못합니다. 고 말했다. 예를 들어 설명해 주시겠습니까? 감사. – derek

+0

@derek - 장래에 이해할 수없는 것을 설명해주십시오. node.js는 기본적으로 파일을 제공하지 않으므로 지원 경로가 없으면 아무 것도 작동하지 않습니다. 그 밖의 무엇을 말할지 모르겠습니다. 코드 예제를 추가했습니다. – jfriend00

+0

내가 누락 한 핵심 포인트는 페이지를 리디렉션하려는 경우 해당 페이지를 라우팅해야한다는 것입니다. – derek

0

확실치 않지만 다른 URL로 리디렉션하는 대신 res.sendFile을 사용하는 것이 좋습니다. 자세한 내용은 API를 확인하십시오. http://expressjs.com/en/api.html

관련 문제