2016-09-07 5 views
0

에 와일드 카드 및 매개 변수 혼합 내가 가진 웹 콘텐츠 :익스프레스

/home/mc/backups/servername/latest/overviewer

나는 특급/nodejs와 매우 간단한 서버가 있습니다. 여기 내 app.js입니다 :

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

//----------------------------------------------------------------------------+ 
// Each server's root points to the latest overviewer page     | 
//----------------------------------------------------------------------------+ 
app.get('/minecraft/:server/*', function(req, res) { 
    console.log('HELLO?'); 
    res.send('Finally some luck!'); 

    /* 
    var 
     server = req.params.server, 
     file = req.params[0] ? req.params[0] : 'index.html', 
     dir = '../backups/' + server + '/latest/overviewer'; 

    res.sendFile(file, { root: dir }); 
    */ 
}); 

app.use(express.static('www')); 

app.listen(80, function() { 
    console.log('Web server listening on port 80'); 
}); 

내가 그래서 당신은이 문제의 XY 종류의 경우 내 의도를 볼 수 있습니다 실행하는 것보다 조금 더 코드가 포함되어 있습니다. 정적 파일을 라우팅하고 싶지만 URL이 내 파일 구조와는 조금 다르게 (그리고 서버 이름을 기반으로) 매핑되기를 원하기 때문에 express.static을 사용할 수 없다고 생각합니다.

그럼 간단한 서버의 문제점은 무엇입니까? 시도하고 mysite.com/minecraft/isopre로 이동하면 나는 Cannot GET /minecraft/isopre 말하는 화이트 페이지를 참조하십시오. 줄 끝에서 *을 제거하면 줄 7에 라우팅됩니다. Finally some luck!이 표시됩니다. 하지만 거기에 별이 있기를 바랍니다. mysite.com/minecraft/isopreindex.html 또는 mysite.com/minecraft/isopre/overviewer.js으로 매핑 할 수 있습니다.

그럼 어떻게해야할까요?

답변

1

바람직한 작동을 수행하기 위해 을 사용 하시겠습니까? 정규 표현식에 대한 기호 :

app.get('/minecraft/:server/:file?', function(req, res, next) { 
    if('undefined' != typeof req.params.file && req.params.file) { 
     var file = req.params.file; 
    } 

    if('undefined' != typeof req.params.server && req.params.server) { 
     var server = req.params.server; 
    } 

}); 

이 경우 : 파일은 선택되고 와일드 카드가 존재하지 않는 경우 Node.js를가 전체 응용 프로그램을 실패하지 않습니다.

req.params.file 변수가 정의되지 않은 경우 index.html 파일을 제공 할 수 있습니다.

+0

매력처럼 작동합니다. 감사합니다 :) 나는 그것이 간단하다고 생각했다. – Assimilater