Экспресс как промежуточное ПО для рендеринга на стороне сервера моего многоязычного углового приложения

Я использовал 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 и перенаправляет, они фактически теряют предпочтение от предыдущего ответа.

Учитывая, что каждый пользователь, скорее всего, выберет предпочитаемый им язык, и тот факт, что сервер должен помнить, что он выбрал, мне кажется логичным, что это должен быть вариант на основе сеанса.

Я понятия не имею, какой бэкэнд вы используете для хранения данных, но для начала лучше посмотреть экспресс-сессию, по умолчанию она использует хранилище в памяти, но поддерживает различные готовые к работе из коробки.

Другие вопросы по тегам