В настоящее время я изучаю MEAN-Stack и пишу инструмент в своем API, который умножает ряд чисел. У меня есть два вопроса, на которые Экспресс-документация не дала ответов.

  1. Как я могу маршрутизировать URL-адреса переменной глубины? В настоящее время я делаю следующее:
router.route('/multiply/:a/:b')

    .get(function(req,res){

        /*multiply*/

        return res.send(respone);
    });

Как видите, таким образом я могу умножить только 2 числа, а не столько, сколько хотелось бы, и этот подход маршрутизирует что угодно, а не только числа для a и b. Итак, мой второй вопрос: как мне маршрутизировать только числа как a & b?

С уважением, Клаас М.

2
Claas M. 12 Авг 2015 в 13:25
Вероятно, лучше использовать только один параметр a, например, а затем поместить сериализованную строку с тем, что вам нужно, в качестве значений.
 – 
michelem
12 Авг 2015 в 13:29

2 ответа

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

// matches /multiply/1/3/4/5/32/4 etc...
router.route('/multiply/:numbers([0-9]+)*')
  .get(function(req, res){

    // req.params.numbers will equal /1/3/4/5/32/4
    var numbers = req.params.numbers.split('/');
    // ..
    // multiply numbers
    // ..
    return res.send(answer);

  }); 

Тестер Express Route — действительно полезный инструмент: http://forbeslindesay.github.io/express-route. -тестер/

3
Jivings 12 Авг 2015 в 13:40
Когда я маршрутизирую multiply/1/2/3 , число содержит только 1, потому что req.params.numbers - это только 1. Любая идея, почему это может быть?
 – 
Claas M.
12 Авг 2015 в 14:01
@КлаасМ. Я не знаю... Пробовали ли вы использовать тестер, чтобы убедиться, что он соответствует вашим данным?
 – 
Jivings
12 Авг 2015 в 15:10
В тестере работает, а в моем проекте нет... странно
 – 
Claas M.
12 Авг 2015 в 15:21

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

router.route('/multiply/:a/:b')

    .post(function(req,res){

        var array = req.body.numbers;
        /*multiply*/

        return res.send(respone);
    });
0
Claas M. 12 Авг 2015 в 16:54