2012-07-11 266 views
1

我玩弄和的NodeJS不同專門盯着nowjsNowJs服務器到網絡服務器

我有現在啓動和運行節點的服務器上運行,我有一個單獨的網絡服務器。我成功地讓節點服務器返回客戶端腳本,並在Web服務器上引用它。這將返回一個200響應代碼,並且所有外觀都很好。然而,我得到的JavaScript錯誤告訴我,'現在'是未定義的。據我瞭解,'now'變量應該通過客戶端腳本可用,但似乎並非如此。有誰知道這種設置是否可行?因此,設置是類似下面的僞代碼

//Server 1 node.com 
if(request.url === '/nowjs/now.js'){ 
     var file = 'path_to_clientlib/now.js'; 
    fs.readFile(file, function(e, data) { 

     if (e) { 
      throw e; 
     } 

     response.writeHead(200,{'Content-Type': 'application/javascript'}); 
      response.end(data); 
} 

和server.com

<script src="/jquery.js"></script> 
    <script src="http://node.com/nowjs/now.js"></script> <!-- This is returned properly --> 
    <script> 
    $(document).ready(function(){ 

    now.receiveMessage = function(name, message){ 
     $("#messages").append("<br>" + name + ": " + message); 
    } 

    $("#send-button").click(function(){ 
    now.distributeMessage($("#text-input").val()); 
    $("#text-input").val(""); 
    }); 

    now.name = prompt("What's your name?", ""); 

    }); 
    </script> 

    <div id="messages"></div> 
    <input type="text" id="text-input"> 
    <input type="button" value="Send" id="send-button"> 

直線距離操作檯只需返回「現在」沒有定義

回答

0

首先有是足夠的模塊,提供靜態文件服務支持,但如果你想手動提供文件,我會這樣做...

var mime = require('mime') // Get mime type based on file extension. use "npm install mime" 
    , util = require('util') 
    , fs = require('fs'); 

function serveFile(filename, res) { 
    var filePath = process.cwd() + filename; 
    var stat = fs.statSync(filePath); 

    res.writeHead(200, { 
    'Content-Type':mime.lookup(filePath), 
    'Content-Length':stat.size 
    }); 

    var readStream = fs.createReadStream(filePath); 

    return util.pump(readStream, res); 
} 

// Your code... 

或檢查出模塊節點靜態NPMGithub

關於如何使用NowJS(from the docs

在服務器

var httpServer = require('http').createServer(function(req, response){ 

    // See code above how to serve static files... 

}); 

httpServer.listen(8080); 

var nowjs = require("now"); 
var everyone = nowjs.initialize(httpServer); 

everyone.now.logStuff = function(msg){ 
    console.log(msg); 
} 

在客戶

<script type="text/javascript" src="http://localhost:8080/nowjs/now.js"></script> 

<script type="text/javascript"> 
    now.ready(function(){ 
    // "Hello World!" will print on server 
    now.logStuff("Hello World!"); 
    }); 
</script> 
+0

嗨,雖然文件服務可能可以以另一種方式完成,但這不是真的我遇到的問題。 JavaScript文件得到正確的服務,但當客戶端腳本正常返回時,其他網站上的'now'始終未定義。是否可以跨域進行此操作? – TommyBs 2012-07-11 10:59:49

+0

@TommyBs您是否有nowInitialize作爲全局函數?否則,請分享您的nowjs版本的鏈接。 這個版本是否一樣? https://raw.github.com/Flotype/now/master/lib/client/now.js – 2012-07-11 11:14:09

+0

嗨,該文件可以在這裏找到http://nodeurl.eu01.aws.af.cm/nowjs/now。 js – TommyBs 2012-07-11 11:29:23