2013-11-03 109 views
2

我試圖調用我的nodejs服務器並顯示來自angularjs應用程序的結果。我一直在關注一個例子,但是當我更改我的代碼的示例代碼時,它總是調用錯誤回調。我有一種感覺,我的服務器出了問題,但是我不能讓它工作,沒有快速或其他庫的nodejs,以及所有其他答案都使用express。我如何使它不使用快遞工作?NodeJS返回JSONP不使用快遞

的代碼angularjs,在那裏我調用服務器:

app.controller('Main', function ($scope, $http) { 
    $scope.init = function() {   
     //var api = 'http://api.trakt.tv/calendar/premieres.json/7c989229f2fa626832e7576eb59820e9/20131103/30/?callback=JSON_CALLBACK';   
     $http.jsonp('http://localhost:8888/selectAllLocations?callback=JSON_CALLBACK').success(function(data) { 
      console.log(data); 
     }).error(function(error) { 
      console.log('My error: ' + error); 
     }); 
    }; 

}); 

,如果我在var API使用的值,結果是正常,併成功被調用,不與我。

這是我的nodejs服務器中的代碼。

var result = sequelize.query(query, null, options, parameters) 
.success(function (rows) {   
    if (type == 'select') { 
     response.writeHead(200, { "Content-Type": "application/json" }); 
     response.write(JSON.stringify(rows)); 
     response.end(); 
    } else if (type == 'modify') { 
     response.writeHead(200, { "Content-Type": "text/html" }); 
     response.write("Query was successful"); 
     response.end(); 
    } 
} 
).error(function (e) { 
    console.log("An error occured: ", e); 
    response.writeHead(404, { "Content-Type": "text/html" }); 
    response.write("There was an error man, shits on fire yo ---> " + e); 
    response.end(); 
} 
); 

Im相當肯定我必須包裝JSON結果的功能,但我不知道怎麼了,我甚至不能知道該功能的名稱,因爲這是我在我的服務器上獲取:

路徑:/ selectAllLocations PARAMS:{「callback」:「angular.callbacks._0」}

我明白即時通訊返回純json,我可以在我的迴應中看到它在鉻中,所以,有一些阻止它從調用成功功能。有人能指出我正確的方向嗎?

回答

3

函數名稱被指定爲callback參數。

response.write(params.callback + '(' + JSON.stringify(rows) + ')'); 
+0

你是對的!工作! {「callback」:「angular.callbacks._0」}我得到的是,angularjs如何重命名回調,並且在接收到的參數中它的另一個值,現在這一切都合情合理。我是否必須將所有答案都包含在該函數中,即使我不返回json? – Toddy

+0

此外,即時通訊開始質疑,如果我沒有使用像表達式那樣使用nodejs框架,因爲這裏的所有問題都在使用它。 – Toddy

+0

@Toddy因爲你正在編寫一個web服務,我建議使用[restify](http://mcavage.me/node-restify/),它類似於表達式,但不太適合構建網頁,更多的是面向朝着服務。至少,這將會照顧到輸出格式正確(回調和所有)給你。 – Dan