запросить два URL-адреса экспресс - PullRequest
0 голосов
/ 15 декабря 2018

Я бы хотел запросить два URL в выражении node.js.это URL этого типа:

app.get(/api/stats/:userId/, (req, res)..........)
app.get(/api/stats/seasonal/:userId/, (req, res)..........)

когда я запускаю свое приложение реагирования и запускаю axios для этих двух разных URL-адресов и сохраняю результат в двух разных таблицах, я получаю в два раза один и тот же результат: данныефайла json первой ссылки (/ api / stats /: userId /).запросы производятся по методу stat, в который включены две разные ссылки (см. ниже).Однако две ссылки соответствуют двум разным данным json.Я ищу ответ на этот вопрос повсюду в течение нескольких дней ... спасибо за вашу помощь!

module.exports = class RS {

  stats(userId, seasonal) {
    return new Promise((resolve, reject) => {
      if(!userId || typeof userId !== 'string') return reject(new TypeError('Invalid username'));
      if(typeof seasonal !== 'boolean') return reject(new TypeError('Seasonal has to be a boolean'));
      var endpoint = `https://r6stats.com/api/stats/${userId}`;
      if(seasonal === true){
        endpoint = `https://r6stats.com/api/stats/${userId}/seasonal`;
      }
      request.protocol(endpoint, (error, response, body) => {
        if(!error && response.statusCode == '200') {
          return resolve(JSON.parse(body));
        } else {
          return reject(JSON.parse(body));
        }
      })
    })
  }

app.get('/api/stats/:userId/', (req, res) => {
    const userId = req.params.userId;
    try{
        R6.stats(userId).then(response => {
            res.send(response);
        }).catch(error => {
            console.error(error)
        });
    }catch(error){
        console.error(error);
    };
});

app.get('/api/stats/seasonal/:userId/', (req, res) => {
  const userId = req.params.userId;
  try{
      R6.stats(userId, true).then(response => {
          res.send(response);
      }).catch(error => {
          console.error(error)
      });
  }catch(error){
      console.error(error);
  };
});

1 Ответ

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

Заказ промежуточного программного обеспечения в Node.js имеет значение.И поэтому ваш второй маршрут никогда не выполняется, потому что первый соответствует URL.

Давайте возьмем, например, URL «/ api / stats / сезонный / 25».Он должен выполнить второй маршрут, верно?

app.get(/api/stats/:userId/, (req, res)..........)
app.get(/api/stats/seasonal/:userId/, (req, res)..........)

Но первый маршрут будет выполнен, потому что 'season / 25' - это ваш userId.Второй маршрут никогда этого не увидит.

Поменяйте их местами, и если дополнительный не найден, Node.js проверит следующее промежуточное ПО.

app.get(/api/stats/seasonal/:userId/, (req, res)..........)
app.get(/api/stats/:userId/, (req, res)..........)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...