2014-01-22 21 views
0

繼共享服務器和客戶端之間的共同作用是文件我有以下的代碼我的應用程序如何使用Node.js的

enter image description here

的prototype.js的結構:

(function(exports) { 
    exports.foo = function() { 
     return 'bar'; 
    }; 
})((typeof process === 'undefined' || !process.versions) ? window.common = window.common || {} : exports); 

app.js contains

var express = require('express'),app = express(),server = require('http').createServer(app),io = require('socket.io').listen(server),port = 3000,path = require('path'); 
var common = require('common/prototype'); 
console.log(common.foo()); 
// listening to port... 
server.listen(port); 
//Object to save clients data 
var users = []; 
app.use(express.static(path.join(__dirname, 'public'))); 

app.get('/', function (req, res) { 
    res.sendfile('/public/index.html'); 
}); 

的index.html包含

<!doctype html> 
<html lang="en"> 
<head> 
    <title>Socket.io Demo</title> 
</head> 
<body>  
    <script src="/socket.io/socket.io.js"></script> 
    <script src="/common/prototype.js"></script> 
    <script> 
    alert(window.common.foo()); //This line will gives me an error TypeError: window.common is undefined 
    </script> 
</body> 
</html> 

現在我想打印 你好,我是從酒吧服務器和客戶端爲好。

現在我能夠從服務器端打印使用以下行

var common = require('common/prototype'); 
console.log(common.foo()); 

但可能無法顯示在客戶端警報。你能幫我找出問題的根源嗎?

+0

你錯誤地鍵入'generic.js'而不是'prototype.js'嗎?如果'prototype.js'正確加載,還要檢查firebug中的網絡選項卡。 –

+0

謝謝,我現在糾正! – imdadhusen

回答

0

根本原因是,當您在HTML中執行<script src="/common/prototype.js"></script>時,該文件將不會被提取,因爲Express靜態中間件僅查找公用文件夾下的文件。

快速測試此方法的方法是將prototype.js複製到public內的javascript文件夾中。然後更新腳本標記以引用文件<script src="/javascripts/prototype.js"></script>

需要記住的是,生活在node_modules下的JavaScript文件不會自動提供給瀏覽器。

+0

感謝您的回答,但這不能解決我的問題。我不想爲客戶端和服務器複製js代碼。我有共同的功能,這將使用雙方(服務器和客戶端),但我不知道我應該把我的js文件從哪裏服務器和客戶端可以訪問的位置。 – imdadhusen