Экспресс как промежуточное ПО для рендеринга на стороне сервера моего многоязычного углового приложения
Я использовал Express в качестве промежуточного программного обеспечения для обслуживания моего углового приложения (SSR), но, поскольку я использовал интернационализацию (испанский и английский) в своем угловом приложении, я поставил свои URL с префиксами /sp и /en для переключения между обоими распределенными forlder для обоих языков.
Просто нужно принять во внимание префикс, чтобы выбрать правильную папку и затем перенаправить запрос в нужную угловую папку dist, но как только я это сделаю, мне нужно удалить языковой префикс /sp /en в каждом URL, прежде чем отображать результат.
Вот что у меня есть
const DIST_FOLDER = join(process.cwd(), 'dist');
app.set('view engine', 'html');
app.set('views', join(DIST_FOLDER, 'en')); // <-- the default language I want to set
app.namespace('/en/', function(){
app.get('*', (req, res) => {
app.set('views', join(DIST_FOLDER, 'en'));
req.url = req.url.slice(4); // <-- here's how I tried to edit the request's url
res.render('index', { req });
})
});
app.namespace('/sp/', function(){
app.get('*', (req, res) => {
app.set('views', join(DIST_FOLDER, 'sp'));
req.url = req.url.slice(4); // <-- same workaround here
res.render('index', { req });
})
});
Но он не работает должным образом, так как у меня все еще есть языковой префикс в URL-адресе запроса, который я пересылаю в мои файлы dist.
Что я упустил? Спасибо
1 ответ
Я думаю, что ваш подход здесь неправильный, единственный способ, которым браузер изменит URL в этом сценарии, если сервер возвращает ответ перенаправления, т.е. 30x
, Однако, основываясь на вашем коде, если сервер удаляет префикс lang и перенаправляет, они фактически теряют предпочтение от предыдущего ответа.
Учитывая, что каждый пользователь, скорее всего, выберет предпочитаемый им язык, и тот факт, что сервер должен помнить, что он выбрал, мне кажется логичным, что это должен быть вариант на основе сеанса.
Я понятия не имею, какой бэкэнд вы используете для хранения данных, но для начала лучше посмотреть экспресс-сессию, по умолчанию она использует хранилище в памяти, но поддерживает различные готовые к работе из коробки.