Необходимо добавить значение в мой URL при выполнении HTTP-запроса на публикацию с помощью облачной функции Google - PullRequest
0 голосов
/ 03 января 2019

Я создаю OTP-тип регистрации для моего мобильного приложения на основе кода реакции.Используя облачную функцию Google для генерации otp и отправки http-запроса моему провайдеру SMS.

Проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда я пытаюсь добавить случайный код в URL своего провайдера sms с помощью ${code},сообщение просто отображает тот же ${code}, а не случайно сгенерированный код.

Другими словами, не знаю, как интерполировать код в мой URL (как я новичок).

Вот мой код для случайного числа:

const code = Math.floor((Math.random() * 8999 + 1000));

И мой запрос с использованием пакета запроса выглядит следующим образом:

const options = {
    method: 'POST',
    uri: 'http://smsprovider.com/numbers=${numbers}&route=2&message=Your OTP is ${code}',
    body: {
        numbers: phone,
        code: code
    },
    json: true
};

Итак, всякий раз, когда я получаю сообщение, оно говорит Your OTP is ${code}.Но на самом деле мне нужно показать случайное число, сгенерированное функцией math.floor.Ожидаемый "Ваш OTP - 5748"

Пожалуйста, руководство

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Строковая интерполяция и кодировка URL - это две разные парадигмы, одна не заменяет другую.

  • интерполяция строк позволяет динамически вставлять содержимое переменной в строку с помощью ${}. Чтобы это работало, вы должны заключить вашу строку между обратными кавычками в соответствии с инструкциями @Ben Beck. Некоторые интерпретаторы будут прощать, что означает, что даже если вы используете одинарные кавычки, интерпретатор, тем не менее, будет анализировать строку с интерполяцией, однако не все интерпретаторы делают это, и полагаться на это плохая практика. Убедитесь, что вы правильно их отформатировали.

  • Кодировка компонента url преобразует параметры URL, содержащие специальные символы, в действительный компонент uri с encodeURIComponent(). Таким образом вы избавляетесь от пробелов и других специальных символов, однако здесь это может не понадобиться, поскольку большинство браузеров делают это за вас. Чтобы быть уверенным, используйте Chrome, но опять же рекомендуется писать полностью переносимый код, я рекомендую кодировать любой параметр, содержащий любой специальный символ.

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

Во время тестирования с вашим кодом напрямую (не через Postman), если вы продолжаете получать литерал ${code} вместо фактического значения, это, вероятно, означает, что определение const code = Math.floor((Math.random() * 8999 + 1000)) не находится в той же области, что и вызов интерполяции , Ниже приведен пример работающего скрипта, использующего как интерполяцию строк, так и кодировку URL-адресов в зависимости от вашего случая:

const request = require('request');

const code = Math.floor((Math.random() * 8999 + 1000));

var p1 = encodeURIComponent(`Your OTP is ${code}`);
var uri = `http://smsprovider.com/?message=${p1}`;

const options = {
  method: 'POST',
  url: uri,
  json: true
};

function callback(error, response, body) {
  if (!error && response.statusCode == 200) {
    console.log(body);
  }
  else {
      console.log(error);
  }
}

request(options, callback);

то же самое, но без кодировки URL и с параметром message, встроенным в элемент body:

var uri = `http://smsprovider.com/`;

const options = {
  method: 'POST',
  url: uri,
  body: {
    message: `Your OTP is ${code}`,
  },
  json: true
};
0 голосов
/ 03 января 2019

Для интерполяции строк с JavaScript обязательно используйте

`

символ вместо

' 

Попробуйте вместо этого:

const options = {
    method: 'POST',
    uri: `http://smsprovider.com/numbers=${numbers}&route=2&message=Your OTP is ${code}`,
    body: {
        numbers: phone,
        code: code
    },
    json: true
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...