404 при добавлении параметров в экспресс-маршрут

System.out.println ("starting loop:");
for (int n = 0; n < 7; ++n)
{
    System.out.println ("in loop: " + n);
    if (n == 2) {
        continue;
    }
    System.out.println ("   survived first guard");
    if (n == 4) {
        break;
    }
    System.out.println ("   survived second guard");
    // continue at head of loop
}
// break out of loop
System.out.println ("end of loop or exit via break");

Это приведет к следующему выходу:

starting loop:
in loop: 0
    survived first guard
    survived second guard
in loop: 1
    survived first guard
    survived second guard
in loop: 2
in loop: 3
    survived first guard
    survived second guard
in loop: 4
    survived first guard
end of loop or exit via break

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

first:
for (int i = 0; i < 4; ++i) 
{
    second:
    for (int j = 0; j < 4; ++j) 
    {
        third:
        for (int k = 0; k < 4; ++k) 
        {
            System.out.println ("inner start: i+j+k " + (i + j + k));
            if (i + j + k == 5)
                continue third;
            if (i + j + k == 7)
                continue second;
            if (i + j + k == 8)
                break second;
            if (i + j + k == 9)
                break first;
            System.out.println ("inner stop:  i+j+k " + (i + j + k));
        }
    }       
}

Поскольку это возможно , это не значит, что вы должны использовать его.

Если вы хотите запутать свой код забавным способом, вы не выбираете значащее имя, а http: и следуете ему с комментарием, который выглядит чуждо, как веб-адрес в исходном коде :

http://stackoverflow.com/questions/462373
for (int i = 0; i < 4; ++i) 
{
     if (i == 2) 
         break http;

Я думаю, это от Джошуа Блоха quizzle. :)

0
задан Petar Ivcec 17 January 2019 в 04:53
поделиться

3 ответа

делает следующее, чтобы захватить работу параметров запроса:

router.get(':facebookUserId?' ... (req, res) => { 
 ... 
 const facebookUserId = req.query.facebookUserId; 
 ... 
});
0
ответ дан Petar Ivcec 17 January 2019 в 04:53
поделиться

Похоже, вы пытаетесь получить строку запроса, а не параметр из маршрута получения конечной точки.

В вашем users.js получите строку запроса из req.query

// as your path is the same with the endpoint prefix api/users, use '/'
router.get('/', jsonParser, async (req, res) => {
  // get user by facebookUserId
  const users = db.collection('users');  

  // get the query string from req.query
  const facebookUserId = req.query.facebookUserId; 

  const query = {
    facebookUserId: facebookUserId,
  };
  const user = await findOne(users, query);
  res.json(user);
});

module.exports = router;

Если вы хотите использовать вместо /:facebookUserId параметр, как в исходном коде, вы Вам нужно будет изменить вызов конечной точки, чтобы он был таким http://xxx/api/users/10213594301678639

0
ответ дан Van 17 January 2019 в 04:53
поделиться

В вашем маршруте вы ожидаете, что параметр facebookUserId будет параметром маршрута (например, / api / users / 10213594301678639), но в приведенном выше примере вы вызываете маршрут с параметром запроса (/ api / пользователи? facebookUserId = 10213594301678639)

0
ответ дан Strobotti 17 January 2019 в 04:53
поделиться
Другие вопросы по тегам:

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