2013-02-02 44 views
0

我使用EJS作爲模板引擎在Express.js中運行測試應用程序。我想訪問存儲在.js文件中的函數來運行服務器端而不是客戶端。舉例來說,如果我有:使用Express.js和EJS訪問服務器端功能

<%= console.log("I'm in the server console"); %> 

服務器捕獲控制檯輸出,如果我有:

<script type="text/javascript"> console.log("I'm in the client-side console"); </script> 

現在,如果我有一個函數輸出相同的客戶端,我可以包括它這樣:

<script type="text/javascript" src="/javascripts/clientSideCode.js"> clientSideOutput(); </script> 

但是,如何包含一個文件及其功能,使EJS可以執行服務器端代碼?看起來,express中的public文件夾僅用於客戶端代碼。

+0

研究輔助功能。 – chovy

回答

0

您可以創建你的模板可通過app.locals訪問輔助功能:

+0

我不確定那正是我要找的。這只是暴露一個對象或整個功能。讓我們來看看我有一個名爲'createFile'的函數,它會在有人點擊一個鏈接後在服務器上創建一個文件,我該怎麼做? –

+1

這聽起來像你正在尋找一條路線。要在有人點擊鏈接時在服務器上創建文件,您需要使用ajax(或POST到可呈現頁面)以及服務器上可創建文件的路徑。 – hunterloftis

0

您可以使用node.jsSocket.IO發出客戶端和服務器之間的實時事件。舉例來說,客戶端會做這樣的事情:

<script>window onload = function() { 

socket.emit('request_customer_list', { state: "tx" }); 

socket.on('receive_customer_list', function(data) { 
$.each(data.customer_list, function(key, value) { 

    socket.set(key, value); // store the customer data and then print it later 
}); 

});} 

在您的服務器,你可以有一個程序來加載客戶名單,併發送回以類似的格式:

socket.on('connection') 
    socket.on('request_customer_list', function(data){ 
    state = data.state; 
    var customer_list; 
    // pretend i loaded a list of customers from whatever source right here 
    socket.emit('receive_customer_list', {customer_list: customer_list}); 
)})};