Экспресс как промежуточное ПО для рендеринга на стороне сервера моего многоязычного углового приложения - PullRequest
0 голосов
/ 25 июня 2018

Я использовал 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 Ответ

0 голосов
/ 25 июня 2018

Я думаю, что ваш подход здесь неправильный, единственный способ, которым браузер изменит URL в этом сценарии, это если сервер возвращает ответ о перенаправлении, то есть 30x.Однако, основываясь на вашем коде, если сервер удаляет префикс lang и перенаправляет, они фактически теряют предпочтение по сравнению с предыдущим ответом.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...