2017-02-17 7 views
0
//route to search (POST http://localhost:8080/api/search) 
    apiRoutes.post('/search', function(req, res) { 
    console.log('search'); 
    var query = req.params; 
    console.log(query); 
    options = { 
     protocol : "https:/", 
     host: "https://api.themoviedb.org", 
     path: "/3/search/movie?api_key=35f7a26be584f96e6b93e68dc3b2eabd&language=en-US&page=1&include_adult=false&query="+query, 
    }; 
    var req = https.request(options, function(res) { 
     var chunks = []; 
     res.on("data", function (chunk) { 
     chunks.push(chunk); 
     }); 
     res.on("end", function() { 
     var body = Buffer.concat(chunks); 
     console.log(body.toString()); 
     }); 
    }); 
    req.write("{}"); 
    req.end(); 
    }) 

ДАННЫЕ ПРОБЛЕМЫ? ПОЖАЛУЙСТА, Я пытаюсь сделать запрос на исследование в api в фильме db и получить результат обратноТипError: Путь запроса содержит неэпизодифицированные символы, любая идея

+0

Возможно, попробуйте экранировать символ '&'? –

+1

Попробуйте заменить «protocol:» https:/«' с «port: 443' и удалите' https: // 'с передней стороны URL-адреса. – dan

+0

Да, но были и esc? –

ответ

0

Есть некоторые проблемы с кодом. Я проверил его и заставил его работать.

let options = { 
     host: "api.themoviedb.org", 
     path: "/3/search/movie?api_key=35f7a26be584f96e6b93e68dc3b2eabd&language=en-US&page=1&include_adult=false&query="+query.data.replace(' ','%20'), 
     }; 
  • первую очередь, так как вы используете модуль HTTPS не нужно указать протокол, ни вам нужно поместить его в URL. Вот как должна быть ваша переменная options.
  • Во-вторых вы прилагая весь объект запроса в URL, который {} вместо этого вы должны добавить строку, которая будет находиться в одном из ключа вашего объекта запроса в моем случае его query.data
  • Третье, если в строке есть пробелы Например: Home Alone Вы должны поддерживать пространство и избегать ошибки, мы заменяем строку % 20, которая является экранирующим символом.
  • Forth Попробуйте указать уникальное имя для переменной запроса https и ее переменной ответа в функции обратного вызова или переопределить переменные маршрута, которые приводят к неправильной работе вашего кода. Обратите внимание на то, как я использовал функцию Рез маршрута для передачи данных обратно и завершить ответ
  • Также я получаю данные в req.body и вы используете req.params однако нет Титулы, определенные в вашем маршруты. Попробуйте идти через documentation для получения дополнительной информации

    Вот полного код

apiRoutes.post('/search',function (req, res) { 
 
     https = require('https'); 
 
     var query = req.body; 
 
     console.log(query.data); 
 
     let options = { 
 
     host: "api.themoviedb.org", 
 
     path: "/3/search/movie?api_key=35f7a26be584f96e6b93e68dc3b2eabd&language=en-US&page=1&include_adult=false&query="+query.data.replace(' ','%20'), 
 
     }; 
 
     var request = https.request(options, function(response) { 
 
     var chunks = []; 
 
     response.on("data", function (chunk) { 
 
      chunks.push(chunk); 
 
     }); 
 
     response.on("end", function() { 
 
      var body = Buffer.concat(chunks); 
 
      console.log(body.toString()); 
 
      res.send(body); 
 
      res.end() 
 
     }); 
 
     }); 
 
     request.end(); 
 
    });

Надеется, что это помогает.

 Смежные вопросы

  • Нет связанных вопросов^_^