2014-12-29 3 views
0

ExpressJS의 가상 호스트 미들웨어를 사용하여 하위 도메인 (business.domain.com)을 정의 된 경로 (domain.com/business)로 지정할 수 있습니까?vhost를 사용하여 서브 도메인을 ExpressJS 경로로 리디렉션 할 수 있습니까?

편집 : lukaszfiszer 님의 제안에 따라 올바른 라우터를 사용할 수 있지만 자산을로드하지 않습니다. 따라서 옥 (jade) 템플릿의 빈 HTML 페이지 일뿐입니다. 메인 페이지에서는 가상 호스트를 통해 하위 도메인에 액세스 할 때 그 자산이 404


당신은 여기에 주요 사이트를 볼 수 줄 것을 그냥 잘 작동 : http://ddbuddyapp.com

현재 하위 도메인을 볼 수 있습니다

: http://business.ddbuddyapp.com


편집 : 다음은 제대로

작업 모든 고정 자산을했다 app.js입니다
var express = require('express'); 
var path = require('path'); 
var favicon = require('serve-favicon'); 
var logger = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 
var methodOverride = require('method-override'); 
var vhost = require('vhost'); 

var main = require('./routes/index'); 
var business = require('./routes/business'); 
var government = require('./routes/government'); 
var university = require('./routes/university'); 
var community = require('./routes/community'); 

var app = express(); 

// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'jade'); 

// uncomment after placing your favicon in /public 
app.use(favicon(__dirname + '/public/favicon.ico')); 
app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(cookieParser()); 
app.use(require('less-middleware')(path.join(__dirname, 'public'))); 
app.use(express.static(path.join(__dirname, 'public'))); 

// Apply Vhost 
app.use(vhost('business.localhost', function(req, res, next) { 
    req.url = "/business" + req.url; 
    next(); 
})); 

app.use('/', main); 
app.use('/business', business); 
app.use('/government', government); 
app.use('/university', university); 
app.use('/community', community); 

// catch 404 and forward to error handler 
app.use(function(req, res, next) { 
    var err = new Error('Not Found'); 
    err.status = 404; 
    next(err); 
}); 

// error handlers 

// development error handler 
// will print stacktrace 
// if (app.get('env') === 'development') { 
//  app.use(function(err, req, res, next) { 
//   res.status(err.status || 500); 
//   res.render('error', { 
//    message: err.message, 
//    error: err 
//   }); 
//  }); 
// } 

// production error handler 
// no stacktraces leaked to user 
app.use(function(err, req, res, next) { 
    res.status(err.status || 500); 
    res.render('error', { 
     message: err.message, 
     error: {} 
    }); 
}); 


module.exports = app; 

답변

0

하위 응용 프로그램을 두 번째 인수로 전달하는 대신 url을 변환 할 함수를 전달하십시오.

+0

나를 위해 준엄한데, 나는 나의 질문을 편집하여 내 제안을 포함하고있는 파일을 포함시켰다. 내 문제는 현재 애셋 중 로딩 중 하나 (예 : 스타일 시트, 자바 스크립트)가 아니라는 것입니다. 모든 제안을 부탁드립니다. –

+0

비취 템플릿에있는 자산의 URL과 프로젝트 폴더의 경로를 제공 할 수 있습니까? – lukaszfiszer

+0

나는 그것을 알아낼 수 있었고, 나는 미들웨어와 정적'app.use()'호출을'가상 호스트 '로 옮겨야 만했다. 질문을 모든 사항을 수정 한 것으로 업데이트하고 귀하의 답변을 정답으로 표시했습니다. 도움을 주셔서 감사합니다. 문제 해결을 도와주었습니다. –

관련 문제