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();
});
希望对您有所帮助。
//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();
});
希望对您有所帮助。