所以我有一个有效的聊天应用程序,基于Socket.IO自己的例子:https://github.com/LearnBoost/socket.io/tree/master/examples/chat
现在我遇到的第一个问题就是修改它,以便与我的网站使用的Express 4.0和Jade一起使用。这不是太具有挑战性,使用Express 4.0的更新代码位于:https://github.com/coolbnjmn/heroku-socket.io
您可以在http://salty-escarpment-7398.herokuapp.com/chat看到它的实际效果 考虑到这一点,我然后尝试将此聊天与我当前的网站一起使用,这就是我遇到麻烦的地方。我必须做出的让它在本地工作的变化如下:
首先,我必须更改行(在index.js中):
var port = process.env.PORT || 3000;
到
var port = 3000;
因为我遇到了EADDRINUSE错误。我没有在节点应用程序中运行其他服务器,但它仍然给我这个。这是我不知道如何解决的第一个问题,因为要让我的网站再次使用heroku(它也使用heroku,就像我的示例应用程序)将需要使用process.env.PORT而不是静态分配的端口号。
其次,我必须更改该行(在public / main.js中):
var socket = io.connect();
到
var socket = io.connect('http://localhost:3000');
因为我说错误
"http://localhost:5000/socket.io/1/?t=1398462814085 404 (Not Found) " error.
第三个也是最后一个:我必须更改一行(在views / chat.jade中):
script(src='/socket.io/socket.io.js')
到
script(src='http://localhost:3000/socket.io/socket.io.js')
因为我说错误
Uncaught ReferenceError: require is not defined
Uncaught ReferenceError: io is not defined
现在通过这些更改,应用程序在本地工作正常,
"http://localhost:3000".
但是我试图让它重新回到Heroku的Cedar堆栈上。我需要做什么才能在我的应用程序中使用原始的3行代码。这是依赖性问题吗?我做了一个npm修剪并重新安装了我认为我需要的东西,但也许我还有太多?我打开数据库连接,这可能与EADDRINUSE有关吗?
我很困惑,所以任何帮助都会受到赞赏。
感谢。
答案 0 :(得分:0)
你已经硬编码了端口3000,但是Heroku指定了一个可变端口,因此你的更改将无法正常工作。