Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js TypeError:请求路径包含未转义字符,知道吗_Node.js_Mongodb_Api_Themoviedb Api - Fatal编程技术网

Node.js TypeError:请求路径包含未转义字符,知道吗

Node.js TypeError:请求路径包含未转义字符,知道吗,node.js,mongodb,api,themoviedb-api,Node.js,Mongodb,Api,Themoviedb Api,有人知道问题出在哪里吗 我正试图请求对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

有人知道问题出在哪里吗


我正试图请求对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();
  })
  • 首先,因为您使用的是https模块,所以不需要指定协议,也不需要将其放入url中。这就是你的选项变量应该是什么

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

  • 第三,如果字符串中有空格,例如:Home-Alone您可以保留空格并避免错误,我们将字符串替换为%20,这是一个转义字符

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

  • 另外,我正在req.body中获取数据,您正在使用req.params但是在您的路由中没有定义参数。请尝试浏览以获取更多信息

    这是完整的代码

apirouts.post('/search',函数(req,res){
https=require('https');
var query=req.body;
console.log(query.data);
让选项={
主持人:“api.themoviedb.org”,
路径:“/3/search/movie?api_key=35f7a26be584f96e6b93e68dc3b2eabd&language=en-US&page=1&include_-maintal=false&query=“+query.data.replace”(“”,“%20”),
};
var request=https.request(选项、函数(响应){
var chunks=[];
关于(“数据”,函数(块){
推(chunk);
});
响应。on(“结束”,函数(){
var body=Buffer.concat(块);
console.log(body.toString());
决议(正文);
决议结束()
});
});
request.end();

});
可能尝试转义
&
字符?尝试将
协议:“https:/”
替换为
端口:443
,并从URL前面删除
https://
。是的,但是您和esc?已经尝试更改您提到的端口和URL
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'),
      };