2

我有一点问题。我正在尝试使用 node.js/express.js/now.js 创建一个动态 Web 应用程序。我已经完成了http://nowjs.com/download的小示例代码中所示的所有操作,但没有成功,客户端 now.js 脚本正确托管,但 now.ready(..) 永远不会触发。唯一的区别是我使用 express 而我用于初始化 now.js 的服务器是 https。

你有什么想法可能导致它不起作用吗?

服务器端:

var server = express.createServer(..);
..
server.listen(port, function() {..});
var nowjs = require('now');
var everyone = nowjs.initialize(server);
everyone.now.log = function(msg) { console.log(msg); }

客户端:

<script type="text/javascript" src="/nowjs/now.js"></script>
<script type="text/javascript">
    now.ready(function() { now.log('asd'); alert('asd'); });
</script>

任何帮助将不胜感激!

最好的,科内尔

4

2 回答 2

3

嗯,找到了答案。长答案:now.js 在确定 socket.io 应该通信的通信端口时存在问题。此问题似乎仅在使用默认 https 端口 (443) 时出现。

我找到了两个解决方案,一个丑陋的: https ://groups.google.com/forum/?fromgroups=#!topic/nowjs/8cO9D77tN2o

基本上你需要在 now/lib/fileServer.js 编辑 now.js 的源代码并替换

var hostPort =  options['port'] || host[1] || '80';

var hostPort =  options['port'] || host[1] || ((request.headers.referer.split(':')[0] === 'https') ? '443' : '80');

更好的方法是将端口选项设置为 socket.io。幸运的是,now.js 支持这一点:

var everyone = nowjs.initialize(server, {port: port, socketio: {transports: ['xhr-polling', 'jsonp-polling']}});

我希望这将帮助其他遇到相同问题的人,也希望稍后在 now.js 中修复此行为。

最好的问候:Kornel

于 2012-08-22T09:22:52.717 回答
0

使用 Safari 运行最新版本的节点,现在在 OSX 上运行。

服务器.js

var html = require('fs').readFileSync(__dirname+'/index.html');
var httpServer = require('http').createServer(function(req, response) { 
    /* Serve your static files */ 
    response.end(html);
})
httpServer.listen(8080);

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

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

索引.html

<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>
done..

启动服务器:

node server.js

打开浏览器:

http://localhost:8080
于 2012-08-21T18:22:43.387 回答