2012-08-13 104 views
2

我正在嘗試使用Node.js來獲取Angular.js應用程序。在Node.js之外使用require()

目前,我有下面的代碼的文件MY-PROJECT/public/js/controllers.js

function LoginController($scope) 
{ 
    // fetch waiters 
    var Waiter = require('../models/waiter.js'); 
} 
LoginController.$inject = ['$scope']; 

中你可以看到,我使用要求()來訪問模型文件。但好像require()函數在這個文件/文件夾中不可訪問。

我在控制檯中看到,當我訪問該網頁是錯誤:

ReferenceError: require is not defined

的原因錯誤肯定是因爲我直接使用此controllers.js文件在我的HTML文件與腳本-tags(所以Node.js中的require() - 函數不可用)。

現在我的問題是:如何訪問controllers.js文件中的模型文件(例如,從MY-PROJECT/models/waiter.js)?

非常感謝提前!

+0

也許嘗試在您的html文件中添加對node.js和/或waiter.js的腳本引用,如waiter.js的此示例: Gloopy 2012-08-13 23:41:14

回答

0

我是這樣做的全部錯誤。因爲我正在製作'realtime-app'(是那個正確的名字?)並且使用Socket.io,它的工作方式不同。

在客戶端控制器中,我向服務器發送消息以請求數據。服務器提取數據並將其發送回客戶端。

所以在客戶端,我實際上不需要模型,因爲我從服務器獲取JSON格式的數據。

這是我如何解決它,可能是有用的人:

/** 
* Login controller 
*/ 
function LoginController($scope, socket) 
{  
    // listen to server when it sends you the cats 
    socket.on('here-are-all-the-cats', function (cats) 
    { 
     $scope.cats = cats; 
    }); 

    // send message to the server, to request the waiters 
    socket.emit('i-want-all-the-cats'); 
} 
WaiterController.$inject = [ '$scope', 'socket' ]; 

注:我用「貓」,而不是「服務員」,只是爲了更清楚給他人。

+0

是否應該在調用emit()之前安裝偵聽器? – 2012-08-14 15:46:11

+0

我已經測試過這個,並且它在偵聽器放入emit()之後工作。但是你是對的,可能是在發佈之前放置偵聽器的最佳實踐();更新! – Voles 2012-08-14 21:50:59

1

RequireJS看起來像它有你所需要的。

+0

謝謝。我之前已經使用過RequireJS來創建整個文件,但是如何才能將它用於這一個文件呢? – Voles 2012-08-13 23:19:10

+0

我沒有使用它,但[API文檔](http://requirejs.org/docs/api.html)看起來很有幫助。 – 2012-08-13 23:22:03

+0

再次感謝,我找到了另一種解決方案,請參閱下面的答案(或以上?) – Voles 2012-08-14 12:46:47

相關問題