gpt4 book ai didi

javascript - Node js + Sails js + websocket 应用程序每隔几个小时就会崩溃

转载 作者:搜寻专家 更新时间:2023-11-01 00:25:38 26 4
gpt4 key购买 nike

我遇到了类似于 socket.io issue using sails.js 的问题.每隔一段时间(每天一次,甚至几个小时,它会有所不同),网站/应用程序的访问者会导致 Node 崩溃,这似乎是由于他的 websocket 客户端尝试连接的方式。不管怎样,这是崩溃日志:

调试:降 sails ...

/Volumes/Two/Sites/lsdfinder/node_modules/sails/node_modules/express/node_modules/connect/lib/utils.js:216
return 0 == str.indexOf('s:')
^
TypeError: Cannot call method 'indexOf' of undefined
at exports.parseSignedCookie (/Volumes/Two/Sites/lsdfinder/node_modules/sails/node_modules/express/node_modules/connect/lib/utils.js:216:19)
at Manager.socketAttemptingToConnect (/Volumes/Two/Sites/lsdfinder/node_modules/sails/lib/hooks/sockets/authorization.js:35:26)
at Manager.authorize (/Volumes/Two/Sites/lsdfinder/node_modules/sails/node_modules/socket.io/lib/manager.js:910:31)
at Manager.handleHandshake (/Volumes/Two/Sites/lsdfinder/node_modules/sails/node_modules/socket.io/lib/manager.js:786:8)
at Manager.handleRequest (/Volumes/Two/Sites/lsdfinder/node_modules/sails/node_modules/socket.io/lib/manager.js:593:12)
at Server.<anonymous> (/Volumes/Two/Sites/lsdfinder/node_modules/sails/node_modules/socket.io/lib/manager.js:119:10)
at Server.EventEmitter.emit (events.js:98:17)
at HTTPParser.parser.onIncoming (http.js:2076:12)
at HTTPParser.parserOnHeadersComplete [as onHeadersComplete] (http.js:120:23)
at Socket.socket.ondata (http.js:1966:22)
9 Oct 10:42:24 - [nodemon] app crashed - waiting for file changes before starting...

在 config/sockets.js 中,授权设置为 true。不知道还能做什么,在哪里解决这个问题。有什么建议么?我也可以阅读 Sails 文档,但这似乎是 Express/Connect 中的一个问题,不是吗?谢谢。

...雷内

最佳答案

问题是每隔一段时间,一个没有 cookie 的客户端会连接。 Sails.js 正在使用 Connect 中的 util.parseSignedCookie() 而不检查错误,因此会引发错误。这就是它在 Sails 中的样子:

if (handshake.headers.cookie) {
handshake.cookie = cookie.parse(handshake.headers.cookie);
handshake.sessionID = parseSignedCookie(handshake.cookie[sails.config.session.key], sails.config.session.secret);
}

如果您查看 Connect 的 cookieParser() 中间件,您会发现需要进行错误检查:

if (cookies) {
try {
req.cookies = cookie.parse(cookies);
if (secret) {
req.signedCookies = utils.parseSignedCookies(req.cookies, secret);
req.signedCookies = utils.parseJSONCookies(req.signedCookies);
}
req.cookies = utils.parseJSONCookies(req.cookies);
} catch (err) {
err.status = 400;
return next(err);
}
}

我创建了一个 Gist here这解决了问题,并会在我有时间时向 Sails.js 提交拉取请求。 Gist 使用 Connect 的 cookieParser() 中间件来自动处理错误。如果你想使用它,请在你的模块文件夹中修改这个文件:

node_modules/sails/lib/hooks/sockets/authorization.js

关于javascript - Node js + Sails js + websocket 应用程序每隔几个小时就会崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19322462/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com