#firebase #express #google-cloud-functions #angular-universal #response.redirect
#firebase #экспресс #google-cloud-функции #angular-универсальный #ответ.перенаправление
Вопрос:
Я пытаюсь автоматически определить, на какой язык веб-сайта следует перенаправлять пользователя.
Настройка — это облачная функция Firebase с сервером ExpressJS и Angular Universal SSR.
Когда предпочтительный язык определен из request.acceptsLanguages(...)
, я пытаюсь перенаправить через response.redirect('/en');
.
При локальной отладке через firebase serve
выполняется перенаправление, но при развертывании, похоже, оно вообще не работает, даже журналы с этой конечной точки не отображаются в списке журналов.
// All base routes are redirected to language specific
app.get('/', (req, res) => {
console.log('this is /');
if (req.acceptsLanguages('cs', 'cs-CZ', 'sk', 'sk-CZ')) {
res.redirect(`/cs`);
} else {
res.redirect(`/en`);
}
});
// All regular routes use the Universal engine
app.get('*', (req, res) => {
console.log('this is *');
res.render('index', { req });
});
export const ssr = functions.https.onRequest(app);
Ответ №1:
Проблема заключалась в том, что файл index.html
передавался как статический на /
маршруте.
Я решил эту проблему, переименовав Angular index.html
в web-index.html
(подойдет любое описательное имя).
Это также можно решить, настроив статический файловый сервер Express так, чтобы он не обслуживал index.html
файлы, если они найдены для соответствующих маршрутов, но это отключило бы обслуживание любых страниц, которые были предварительно отрисованы (если у вас настроена предварительная отрисовка SSR).