перезагрузка глубокого маршрута после удаления «#» из URL-адреса в выражении углового отклонения приложения [дубликат]

C имеет концепцию неопределенного поведения, то есть некоторые языковые конструкции синтаксически верны, но вы не можете предсказать поведение при запуске кода.

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

Итак, имея в виду, почему эти «проблемы»? Язык ясно говорит, что определенные вещи приводят к неопределенному поведению . Нет проблем, нет «необходимости». Если неопределенное поведение изменяется, когда объявлена ​​одна из вовлеченных переменных volatile, это ничего не доказывает или не изменяет. Это undefined ; вы не можете рассуждать о поведении.

Ваш наиболее интересный пример, один с

u = (u++);

является примером неопределенного поведения в текстовой книге (см. запись Википедии в точек последовательности ).

18
задан tonymx227 16 May 2013 в 06:40
поделиться

4 ответа

Итак, у меня была такая же проблема. Я написал приложение, которое использует API истории в браузерах, и я хотел переписать все нестатические URL обратно на index.html. Поэтому для статических файлов я сделал:

app.configure(function() {
  app.use('/', express.static(__dirname + '/'));
});

Но тогда для созданных путей API в истории я сделал:

app.get('*', function(request, response, next) {
  response.sendfile(__dirname + '/index.html');
});

Это означало, что любой запрос, который не был файлом или каталог в / (такой как URL-адрес, сгенерированный API-интерфейсом истории) не будет переписан или перенаправлен, но вместо этого будет загружен файл index.html, а затем все магии маршрутизации JS.

Надеюсь, это близко к тому, что вы ищете?

28
ответ дан Ahmed Nuaman 24 August 2018 в 18:14
поделиться

Вы можете переписать URL-адрес, прежде чем перейти к обработчику, который хотите использовать.

app.use(function(req, res, next) {
   if (req.url === '/toto') {
     req.url = '/heytoto';
   }
   next();
});

app.get('/heytoto', ...);

Я использовал аналогичный метод , чтобы переписывать URL с регулярными выражениями .

18
ответ дан famousgarkin 24 August 2018 в 18:14
поделиться

Попробуйте следующее:

app.get('/toto', function(req, res) {
  res.redirect('/heytoto');
});
-3
ответ дан Matthis Stenius 24 August 2018 в 18:14
поделиться

Решение, которое работает без response.sendfile(..), заключается в использовании промежуточного программного обеспечения перезаписи, которое было вставлено до app.use(express.static(..)) следующим образом:

// forward all requests to /s/* to /index.html

app.use(function(req, res, next) {

  if (/\/s\/[^\/]+/.test(req.url)) {
    req.url = '/index.html';
  }

  next();
});

// insert express.static(...)

Таким образом, expressjs правильно распознает переписывание. Затем промежуточное программное обеспечение static позаботится об обслуживании файла.

3
ответ дан nre 24 August 2018 в 18:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: