NodeJS不响应CURL请求
问题描述:
使用NodeJS来执行som查询到MongoDB。 我已经设置了路由,所以当NodeJS不响应CURL请求
http://127.0.0.1:8888/GetAllCities
被调用时,函数名GetAllCities将在服务器上运行,并执行MongoDB的查询并返回结果。 当我尝试直接在浏览器中访问该页面时,此功能正常。 但是当我尝试做一个CURL请求时,响应是空的。
这是我的jQuery AjaxCall的
function makeCall(urlToCall, method)
{
var params = "url=" + urlToCall + method;
if(app === "PHP")
{
params += "&PHP=PHP";
}
$.ajax({
type: "POST",
url: "phpProxy.php",
data: params,
beforeSend: function()
{
document.write(app + ' -- Starting round ' + (i+1) + "<br />");
document.write('URL: ' + params + "<br />");
startTime = new Date().getTime();
},
success: function(data) {
endTime = new Date().getTime();
totalTime = endTime - startTime;
if(totalTime > highest)
{
highest = totalTime;
}
if(totalTime < lowest)
{
lowest = totalTime;
}
var row = {};
row.app = app;
row.operation = method;
row.totalTime = totalTime;
row.run = i+1;
row.date = new Date();
document.write('\tTotal time: <strong>' + totalTime + 'ms</strong>' + "<br />");
times.push(row);
document.write(data + "<br />");
document.write('Round done\n' + "<br />" + "<br />");
},
error: function(err) {
console.log('Error');
console.log(err);
},
complete: function()
{
i++;
if(i < 50)
{
makeCall(urlToCall, method);
}
else
{
var sum = 0;
for(var j = 0; j < times.length; j++)
{
sum += parseInt(times[j].totalTime);
}
var avg = sum/times.length;
$('body').prepend('<h3>Slowest: ' + highest + 'ms</h3>');
$('body').prepend('<h3>Fastest: ' + lowest + 'ms</h3>');
$('body').prepend('<h3>Average: ' + avg + 'ms</h3>');
myApp.saveToDb(times);
}
}
});
}
这是我PHPPROXY FILE:
$method = $_SERVER['REQUEST_METHOD'];
$url = $_POST['url'];
$curl=curl_init();
curl_setopt($curl,CURLOPT_URL, $url);
curl_setopt($curl,CURLOPT_POST, TRUE);
if(isset($_POST['PHP']))
{
$params = array('a' => 'php');
curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
$result = curl_exec($curl);
curl_close($curl);
echo $result;
,这是我的NodeJS requesthandlerfile。
var Db = require('mongodb').Db;
var Server = require('mongodb').Server;
var querystring = require("querystring");
function GetAllCities(response)
{
console.log('Request recieved');
var databaseUrl = "exjobb";
var collections = ["cities"]
var db = require("mongojs").connect(databaseUrl, collections);
db.cities.find(function(err, cities) {
response.writeHead(200, {"Content-Type": "application/json"});
response.write(cities.length + " rows selected from the Database");
response.end();
db.close();
});
}
function GetAllCitiesWhere(response)
{
var databaseUrl = "exjobb";
var collections = ["cities"]
var db = require("mongojs").connect(databaseUrl, collections);
db.cities.find({state: "AL"}, function(err, cities) {
response.writeHead(200, {"Content-Type": "application/json"});
response.write(cities.length + " rows selected from the Database");
response.end();
});
}
exports.start = start;
exports.GetAllCities = GetAllCities;
exports.GetAllCitiesWhere = GetAllCitiesWhere;
TLDR;我的代码在浏览器中访问页面时直接获取GET,但是在发出Ajax请求时无法工作,为什么? 你可以找到所有的代码here
答
这是解决注释中所述。
问题是我的卷发请求中的这一行。
curl_setopt($curl,CURLOPT_POST, TRUE);
我改变了我的PHP代理以下设置:
$method = $_SERVER['REQUEST_METHOD'];
$url = $_POST['url'];
$curl=curl_init();
curl_setopt_array($curl, array(CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => $url,CURLOPT_USERAGENT => 'Josefs PHPPROXY'));
$result = curl_exec($curl);
curl_close($curl);
echo $result;
是否已确认'curl'是currectly从PHP脚本运行? (您的PHP脚本是否正确地获取任何页面?您是否已经直接从命令行测试了运行'curl'?) – apsillers 2013-04-23 13:03:42
另外,您的PHP脚本正在执行'curl'' POST'请求而不是'GET';这可能是问题吗? – apsillers 2013-04-23 13:06:33
你可以发布设置路由/服务器的node.js代码吗? – 2013-04-23 13:35:20