2015-01-03 9 views
1

Я видел много сообщений, занимающихся этой проблемой, но никто не работает для меня, и многие решения используют устаревшие методы.Route 404.html for Express app

У меня есть статический каталог файла уже создан:

app.use(express.static(__dirname + "/public", {maxAge: 86400000*30 })); 

Тогда у меня есть собственная страница 404.html в этом общедоступном каталоге. Теперь любые неправильные URL-адреса должны быть перенаправлены на страницу 404.html. Я попытался следующие:

app.use(function(req, res, next){ 
    res.render("404.html", { url: req.url }); 
}); 

Но я получаю ответ:

Error: Cannot find module 'html' 

Что я делаю не так и почему такая простая вещь, так трудно?

+0

Экспресс ожидает наличия средства визуализации для все типы файлов, даже статические, такие как HTML. См. Этот ответ для получения дополнительной информации: http://stackoverflow.com/a/4531225/502126 –

+0

Если вы используете 404.html в качестве шаблона, какой шаблон? EJS? нефрит? рули? Что-то другое? Или это действительно не шаблон, и вы просто хотите отображать статический контент, если никакой обработчик маршрута не соответствует? – mscdex

+0

@mscdex Это просто обычная html-страница, без шаблона или динамического содержимого. Не использовать нефрит или ejs или что-то в этом роде. Точно так же мое приложение также загружает index.html как обычную страницу html, потому что Express указывает на общую папку. – Coop

ответ

1

Попробуйте обновить свою версию до последней экспресс

редактируется (исправленная версия от @mscdex)

app.get('/api', function(req, res) { 
    ..... 
    res.status(404).sendFile(__dirname + '/public/404.html'); 
}); 

http://expressjs.com/api.html#res.status

+0

Я использую Express 4.7.2. Это очень недавний выпуск. Как его модернизировать, это поможет мне с маршрутизацией 404? – Coop

+0

У меня недостаточно репутации, чтобы комментировать эту запись. Мой ответ был на ваш комментарий «Я получаю TypeError: Object # не имеет метода« sendFile »из ответа @mscdex –

+1

Теперь, похоже, я должен был поместить фрагмент кода ниже всех моих маршрутов API, иначе они просто Ничего не сделал. благодаря – Coop

2

Просто поместите что-то вроде этого после того, как все ваши другие промежуточного ПО и маршрут обработчиков:

app.use(function(req, res) { 
    res.sendFile(__dirname + '/public/404.html'); 
}); 
+0

Я получаю 'TypeError: Object # не имеет метода 'sendFile'' – Coop

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