1
使用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'是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