TypeError:请求路径包含未转义字符,任何想法

时间:2017-02-17 15:10:54

标签: node.js mongodb api themoviedb-api

//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();
  })

任何人都有问题吗?请 我试图做一个请求对电影数据库进行研究并获得结果

1 个答案:

答案 0 :(得分: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模块,所以您不需要指定协议,也不需要将其放在网址中。这就是你的期权变量应该如何。
  • 其次,您要将整个查询对象附加到{} 的网址,而应该附加一个字符串,该字符串将位于您的查询对象的一个​​键中,其中 query.data
  • 第三,如果字符串例如:Home Alone 中有空格以保持空间并避免错误,我们用%20 替换字符串,这是一个转义字符。
  • Forth尝试在回调函数中为https请求变量及其响应变量提供唯一名称,否则它将覆盖路由的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();
    });
   

希望它有所帮助。