我一直在使用 SailsJS 开发一个应用程序。一切都工作正常,直到几个小时前我没有收到 socket.get()
的响应。我检查了 chrome 控制台中的网络选项卡,发现最后一个请求仍处于待处理状态。
请求的 Uri:
ws://localhost:1337/socket.io/1/websocket/FBcw-Q4H3PLFXcIlb0GB
状态代码:
101 切换协议(protocol)
我四处搜寻,有人说这是由于防火墙造成的。所以我禁用了它们,但这没有帮助。其他一些人建议默认为 xhr 轮询,所以我这样做了,但同样的事情发生了,请求
http://localhost:1337/socket.io/1/xhr-polling/4_gAWYQJtKdXhDFEcxHe?t=1395536371612
永远处于待处理状态。
响应这里的评论的是请求事件:
socket.get('/session/create', {
username: username,
password: password
}, function (response) {
console.log(response) // null
});
响应永远不会返回,并且在回调中始终为 null。我什至尝试立即发送回复,但也没有返回。下面的例子:
// Session controller
module.exports = {
create: function (req, res) {
return res.json({foo: 'bar'}, 200);
}
}
最佳答案
抱歉,我做了一些摆弄,发现了问题(可能是我犯了一个愚蠢的错误)。
我启用了快捷方式网址,这在 SailsJS 中意味着对 /foo/bar 的请求将映射到 FooController.bar
这工作得很好,直到我添加了如下例所示的通配符路由:
获取/:foo/:bar
这似乎破坏了请求。由于我向 /session/create
发送请求,并依赖快捷路由而没有指定显式路由,因此它由 :foo/:bar
路由解释。
经验教训:禁用快捷方式 URL 并使用正确的路由。
关于javascript - SailsJS,Socket IO 101(切换协议(protocol))永远悬而未决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22585732/