2013-07-12 6 views
3

현재 제이드 템플릿에 현재 URL을 기준으로 하이퍼 링크 (<a>)를 쓰려고합니다.Express/Jade의 관련 링크

는 예를 들어, 내보기 http://localhost/cats에서 호출과는 다음과 같습니다 : 나는 시도했다 http://localhost/cats/fluffy

것 대신에,

링크를 클릭
extends layout 

block content 
    a(href='fluffy') Fluffy 

, 그것은 http://localhost/fluffy에 나를 소요 :

  • a(href='./fluffly')
  • a(href='/fluffy')
  • 그냥 a(href='cats/fluffy')처럼, 절대 경로를 쓰고에서만 작동하는 것에 대해서는

. 분명히 할 수있는 더 좋은 방법이 있습니다. 익스프레스의 기본 동작은 /cats/cats/을 치료하는 것입니다

+1

나는 그것을 재현 할 수 없으므로'/ cats'을 열지 않았습니까? 익스프레스는 기본적으로 후행 슬래시는 신경 쓰지 않고'/ cats'와'/ cats /'를 동일하게 처리합니다 (둘 다 동일한 경로를 트리거합니다). – robertklep

+0

''태그를 사용하고 있습니까? 그렇다면 가치는 무엇입니까? – gustavohenke

+0

@robertklep 확실합니다. @gustavohenke ''태그를 사용하고 있지 않습니다. 아마도 그렇게해야합니다. 사실, 나는 단지 HTML 출력을 확인했고 올바르게''로 나타나고있다. 불행하게도 현재 페이지가 http : // localhost/cats인데도 불구하고 http : // localhost/fluffy가 될 것입니다. – Travis

답변

3

당신은 이미 /cats을 열 때 fluffy에 대한 상대 링크가 배경 /fluffy :

비트 당신을 이끌 것이라고 예상 할 수있어, 자신을 발견으로 같은, 그리고 둘 다 같은 경로를 트리거합니다.

당신이 중 하나는 링크 (특히 상대 링크)를 만들 때 계정으로 가져가, 또는 두 개의 경로로 처리하는 익스프레스 말할 필요 :

app.enable('strict routing'); 

app.get('/cats/', function(req, res) { 
    ... 
}); 

/cats/ 일치합니다,하지만 /cats. 물론 경로 정의에서 후행 슬래시를 사용하지 않으면이 동작이 취소됩니다.

1

당신이 gulp-jade를 사용하는 경우, 믹스에 gulp-data을 추가하고이 코드를 사용합니다

var jade = require('gulp-jade'); 
var data = require('gulp-data'); 

gulp.src('**/*.jade') 
    .pipe(data(function (file) { 
    var relativePath = file.history[0].replace(file.base, ''); //e.g. about/index.jade 
    var depth = (relativePath.match(/\//g) || []).length; //e.g. 1 
    var relativeRoot = new Array(depth + 1).join('../'); //e.g. ../ 
    return { 
     relativeRoot: relativeRoot 
    }; 
    })) 
    .pipe(jade()) 

이 본질적으로 당신에게 당신의 jade 템플릿에 relativeRoot을 줄 것이다 : <nothing>는 또는 ../는 여러 번으로 반복 기본 폴더를 기준으로 중첩 된 디렉토리 수입니다.

그런 다음 템플릿에서 : 디스크에 절대 경로 (

link(rel='stylesheet', href= relativeRoot + 'assets/main.css') 

file.history가 생성되는 방법을 여기서/완전히 잘 모르겠지만, 내 경우에는 [0]은 원래 파일 이름에 지적)

+0

Clever! 나를 위해 잘 일했다. 그래도 예상치 못한 접근 방식인데, 템플릿의 관점에서 'relativeRoot' 변수는 어디에도없는 것처럼 보입니다. – peteorpeter

+0

depth = 0 인 경우에도 _all_ 자신의 URL이 상대 경로가되기를 원하는 사람들을 위해 : var relativeRoot = depth === 0? ./ ': 새 배열 (깊이 +1) .join ('../ ');' – peteorpeter