2014-01-14 2 views
3

Возможно ли использовать статический контент и представления из одного и того же каталога? я нашел частичное решение ниже:Сохранять статический контент и представления из одного каталога?

//Enable Express static content serving: 
app.use(express.static(__dirname + '/html')); //Static path is folder called html 

//Also enable EJS template engine: 
app.engine('.html', require('ejs').__express); 
app.set('views', __dirname + '/html'); //Set views path to that same html folder 
app.set('view engine', 'html'); //Instead of .ejs, look for .html extension 

//Start server 
app.listen(8000); 

//Express routes: 
app.get('/', function(req,res) { 
    res.render('index', { message: 'hello world'}); 
    //this only serves static index.html :(
}); 

app.get('/home', function(req,res) { 
    res.render('index', { message: 'hello world'}); //<-- this serves EJS 
    //whoo-hoo! serves index.html with rendered EJS 'hello world' message 
}); 

Это работает отлично, первый маршрут «/», который не оказывает EJS кроме. Все остальные маршруты (/ home,/about и т. Д.) Будут удобно обслуживать динамическое EJS вместе со статическим контентом. Нужно ли вообще обмануть, что первая «/» работает так же?

ответ

2

Для 3.x Экспресс попробуйте поставить маршрутизатор, прежде чем статические:

app.use(app.router); 
app.use(express.static(path.join(__dirname, 'html'))); 

Для экспресс 4.x маршрутизатор является устаревшим, но концепция та же, как и маршруты, как промежуточного слоя, так что вы должны быть в состоянии назвать их перед статическим промежуточным программным обеспечением.

+0

Спасибо, что решил; главный '/' маршрут отлично работает :) – Derrick

+0

Кажется, что 'app.router' устарел, и это больше не работает. – cgmb

+0

@cgmb - спасибо - Ive сделал заметку в сообщении. Процесс должен быть таким же, как я предполагал бы, так как все сначала используют промежуточное ПО. – cyberwombat

Смежные вопросы