переменная общего доступа для экспресс-маршрутов - PullRequest
0 голосов
/ 11 декабря 2018

Я не могу поделиться var между маршрутами в моем index.js.Мне нужно использовать страницу Var от первого маршрута во втором маршруте.Нужно ли закрытие для этого?У меня есть два маршрута:

Первый маршрут:

router.get('/:page', async (req, res, next) =>{

var perPage = 5;
var page = req.params.page || 1;

console.log(page);
const expedientes = await Expediente
  .find()
  .skip((perPage*page)-perPage)  
  .limit(perPage)
  .exec((err, expedientes)=> {
              Expediente.count().exec((err, count)=> {
                  if (err) return next(err)
                  res.render('index', {
                      expedientes,
                      current: page,
                      pages: Math.ceil(count / perPage)
                  })
              })
          })
  });

Второй маршрут:

router.get('/select/:id', async (req,res) => {



const { id } = req.params;
  const {path} = req.path;
  const expediente = await Expediente.findOne({selected:true});
  const expediente2 = await Expediente.findById(id);



  if (expediente){
      expediente.selected=!expediente.selected;
      await expediente.save();
  }

  expediente2.selected=!expediente2.selected;
  await expediente2.save();

  res.redirect('/1');

});

Мне нужно использовать страницу var для последней строки второго маршрута,Как я могу получить это значение, чтобы использовать его?Я попытался:

res.redirect('/'+ page); 

, но это не работает.Некоторая информация об этой проблеме?

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Решение не простое.В моем приложении у меня есть две разные потребности.Оба, необходимо получить данные из базы данных.

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

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

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

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

Поэтому мой вопрос: могу ли я сохранить res.params.page в переменной, а затем использовать эту переменную в другом маршруте?

0 голосов
/ 11 декабря 2018

Вам, вероятно, следует избегать сохранения состояния внешнего интерфейса в своем бэкэнде.Чтобы избежать этого, вы можете ввести параметр запроса с перенаправлением

router.get('/select/:id', async ( req, res ) => {

    const { id } = req.params;
    const {path} = req.path;
    const expediente = await Expediente.findOne({selected:true});
    const expediente2 = await Expediente.findById(id);
    const page = req.query.page;   

    if (expediente){
          expediente.selected=!expediente.selected;
          await expediente.save();
    }

    expediente2.selected=!expediente2.selected;
    await expediente2.save();

    res.redirect('/' + page);

});

Затем вам нужно вызвать URL с /select/2?page=1, который перенаправит вас на страницу.

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

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