TypeError: Request path contains unescaped characters, any idea

TypeError: Request path contains unescaped characters, any idea

//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 电影数据库进行研究并取回结果

代码有一些问题。我已经对其进行了测试并使其正常工作。

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 中。这就是您的选项变量应该如何。

  • 其次,您将整个 查询对象附加到 url,即 {} 而不是您应该附加一个字符串,该字符串将在一个在我的例子中,你的查询对象的键是 query.data

  • 第三如果字符串中有space例如:Home Alone你维护space避免我们的错误用转义字符 %20 替换字符串。

  • Forth 尝试在回调函数中为 https 请求变量及其响应变量指定一个唯一的名称,否则它将覆盖 route 的 req res 变量导致您的代码不工作。请注意我是如何使用路由的 res 函数发回数据并结束响应的

  • 我也在 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();
    });

希望对您有所帮助。