Nodejs服务器就像本地的冠军一样。部署到Azure Web App时,它会因服务器错误而失败: isnode在处理请求时遇到错误。
HRESULT:0x6d HTTP状态:500 HTTP subStatus:1013 HTTP原因: 内部服务器错误您收到此HTTP 200响应,因为 system.webServer/iisnode/@devErrorsEnabled配置设置为 '真正'。 ...
这里没有真实信息,所以转向日志......我看到了:
2015年7月24日星期五01:17:32 GMT + 0000(世界协调时间): 无异常:TypeError:Object \。\ pipe \ b9a229c1-7e20-4d2a-9f2d-fec75412cede没有方法 '听众' 在Server.attach(D:\ home \ site \ wwwroot \ node_modules \ socket.io \ node_modules \ engine.io \ lib \ server.js:358:26) 在Function.attach(D:\ home \ site \ wwwroot \ node_modules \ socket.io \ node_modules \ engine.io \ lib \ engine.io.js:124:10) 在Server.listen.Server.attach(D:\ home \ site \ wwwroot \ node_modules \ socket.io \ lib \ index.js:226:21) 在新服务器上(D:\ home \ site \ wwwroot \ node_modules \ socket.io \ lib \ index.js:51:17) 在Function.Server(D:\ home \ site \ wwwroot \ node_modules \ socket.io \ lib \ index.js:39:41) 在对象。 (d:\家\网站\ wwwroot的\ server.js:11:17) 在Module._compile(module.js:456:26) at Object.Module._extensions..js(module.js:474:10) 在Module.load(module.js:356:32) 在Function.Module._load(module.js:312:12)
追溯回来,我认为感兴趣的是:
at Object。 (d:\家\站点\ wwwroot的\ server.js:11:17)
在nodejs服务器代码中:
var socket = io.listen(process.env.port || 3000);
所以我猜这个失败可能是由于版本控制还是什么?我似乎无法获得任何socket.io应用程序作为云服务或云应用程序在azure Web部署上工作。
其他人?
答案 0 :(得分:0)
你可以发布剩下的代码吗?初始化io
变量对于了解哪些内容非常重要。
如果使用Express 4
,初始化时,您的代码应该类似于此var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
// Get the port that we should be listening on
server.listen(process.env.PORT || 8080);
在配置中,当使用IISNode时,您需要通过将以下内容添加到Web.config中的<handlers>
元素来指定您正在使用Socket.io:
<add name="iisnode-socket.io" path="server.js" verb="*" modules="iisnode" />
此外,我们需要让IISNode知道如何通过添加新的重写规则来指导我们的Socket.io请求:
<rewrite>
<rules>
<rule name="SocketIO" patternSyntax="ECMAScript">
<match url="socket.io.+" />
<action type="Rewrite" url="server.js"/>
</rule>
</rules>
<rewrite>
同时检查并查看服务器实例上是否正确安装了socket.io包。
Here's我写了一篇关于使用Socket.io和虚拟目录使用在IIS中使IISNode工作的答案。