URL с проблемой соответствия динамических параметров в Express (NodeJS) - PullRequest
0 голосов
/ 10 мая 2019

У меня проблема с маршрутом с динамическим параметром GET в Express 4.16 (и узлом 12.1.0): маршрут никогда не выполняется, но только для некоторых значений.

Маршрут, по которому я пытаюсь пройти, следующий:

app.get('/done/:taskid', function(req, res){

Маршрут никогда не подходит для taskid = 0 или taskid = 1, и я просто не могу понять, почему. Прекрасно работает для taskid> 1. На самом деле, каждое значение, кроме 0 или 1, работает (строки, ноль, что угодно ...).

Приложение не падает, я не получаю никакого журнала, но код, связанный с маршрутом, никогда не выполняется, и я просто перенаправлен на

app.get('/', function(req, res){

Я очень новичок в NodeJS, так что это может быть основной ошибкой, но я просто не могу это понять.

Вот полный код моего main.js:

const app = require('express')();
const twig = require('twig');
const bodyparser = require('body-parser');

app.set('views', __dirname + "/views");
app.set('view engine', 'twig');
app.use(bodyparser.urlencoded());

var todolist = [];

app.get('/', function(req, res){
  res.setHeader('Content-Type', 'text/html');
  res.render('index.html.twig', {todolist: todolist});
});

app.get('/done/:taskid', function(req, res){
  console.log(req.params);
});

app.post('/new', function(req, res){
  //insert in DB later
  todolist.push({
    name: req.body.taskName,
    done: false
  });
  res.redirect(301, '/');
});

app.listen(8000);

Я пытаюсь получить к нему доступ по простой ссылке:

<a class="btn btn-sm btn-primary" href="/done/0">Mark as done</a>

Запуск приложения через pm2 или узел ничего не меняет.

Есть ли у кого-нибудь понимание того, как я могу передать в ссылке идентификатор, равный 0 или 1, и успешно сопоставить этот маршрут?

=================

Редактировать: Итак, по-видимому, не было ошибки ... или, по крайней мере, не связанной с сопоставлением URL По какой-то причине запрос был переведен в состояние "зависания" и достаточно долго, чтобы я мог подумать, что он ничего не соответствует (> 1 мин). Что странно, потому что я запускаю это приложение в док-контейнере на моем локальном хосте. У меня открыта только 1 вкладка, и я несколько раз проверял работу приложения и перезапускал его, поэтому я почти уверен, что только 1 клиент делает запрос в мое приложение ... Я пошел спать вчера, вернулся сегодня утром, тот же код начал работать. Я серьезно не знаю, что случилось.

=================

Редактировать 2: Провел немного больше испытаний, нашел образец. Проблема кажется относительно хрома. Код прекрасно работает с Firefox и Safari. Не работает 100% времени с Chrome ... НО, он работает 100% времени с Chrome, если у меня открыта консольная панель ... Как будто ошибка чувствительна и происходит только тогда, когда никто не смотрит ...

1 Ответ

0 голосов
/ 11 мая 2019

Итак, проблема была решена путем изменения моего <a href=""> на <form method="post" ...> и изменения моих маршрутов соответственно.До сих пор не знаю, что вызвало проблему, но это работает сейчас.

ссылки Andrew , представленные в комментариях, подсказывают хрому предварительную загрузку моих ссылок и изменение моих данных до нажатия кнопки мыши.Не объясняет, почему мне не пришла в голову мысль.

Мораль истории: не используйте методы GET для изменения / удаления данных.

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