Closed SummonHIM closed 1 year ago
nuxt-auth 不仅要设置 AUTH_ORIGIN 还需要设置 NEXTAUTH_URL,否则在登录跳转的时候不会跳转的预期地址(当时没设置 NEXTAUTH_URL 坑了我好几天)
prisma client 会根据不同平台,由于 docker 镜像通常会缺失一些文件,因此需要在 binaryTargets 中添加目标服务器来进行构建。
我这里只测试了 macos 14 和 centos 7系统,其他系统则根据对应的报错提示添加便可。
nuxt-auth 不仅要设置 AUTH_ORIGIN 还需要设置 NEXTAUTH_URL,否则在登录跳转的时候不会跳转的预期地址(当时没设置 NEXTAUTH_URL 坑了我好几天)
设置了NEXTAUTH_URL后,监听模式无法启动 环境是docker+nginx
运行日志和浏览器控制台也完全没有输出反馈,只有一个与超星头像的Mixed Content警告
至于说监听功能,有些不稳定,几小时会存在断连的情况(我这里使用的是 easemob-websdk即某星官方的库)
至于说监听功能,有些不稳定,几小时会存在断连的情况(我这里使用的是 easemob-websdk即某星官方的库)
不是断链,是点监听按钮没反应
控制台有无输出类似字样?
❯ docker logs chaoxing-sign-server-1
Listening on http://[::]:8050
[nuxt] [request error] [unhandled] [500] Cannot read properties of null (reading 'uid')
at ./.output/server/chunks/accounts.get.mjs:55:21
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async Object.handler (./.output/server/chunks/nitro/node-server.mjs:2375:19)
at async Server.toNodeHandle (./.output/server/chunks/nitro/node-server.mjs:2564:7)
[nuxt] [request error] [unhandled] [500] Cannot read properties of null (reading 'uid')
at ./.output/server/chunks/accounts.get.mjs:55:21
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async Object.handler (./.output/server/chunks/nitro/node-server.mjs:2375:19)
at async Server.toNodeHandle (./.output/server/chunks/nitro/node-server.mjs:2564:7)
[nuxt] [request error] [unhandled] [500] Cannot set headers after they are sent to the client
at new NodeError (node:internal/errors:405:5)
at ServerResponse.setHeader (node:_http_outgoing:648:11)
at setResponseHeaders (./.output/server/chunks/nitro/node-server.mjs:1871:20)
at ./.output/server/chunks/handlers/renderer.mjs:74:7
at async Object.handler (./.output/server/chunks/nitro/node-server.mjs:2375:19)
at async Server.toNodeHandle (./.output/server/chunks/nitro/node-server.mjs:2564:7)
17:45:39:846 IM SDK [debug]: init Msync by connection
17:45:39:862 IM SDK [debug]: open
17:45:40:267 IM SDK [info]: httpType: https
17:45:40:972 IM SDK [debug]: websockt onOpen
17:45:41:95 IM SDK [debug]: dispatch event: onConnected
17:45:45:161 IM SDK [debug]: websocket onClose
17:45:45:161 IM SDK [debug]: dispatch event: onDisconnected
[nuxt] [request error] [unhandled] [500] Cannot read properties of null (reading 'uid')
at ./.output/server/chunks/accounts.get.mjs:55:21
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async Object.handler (./.output/server/chunks/nitro/node-server.mjs:2375:19)
at async Server.toNodeHandle (./.output/server/chunks/nitro/node-server.mjs:2564:7)
[nuxt] [request error] [unhandled] [500] Cannot read properties of null (reading 'uid')
at ./.output/server/chunks/accounts.get.mjs:55:21
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async Object.handler (./.output/server/chunks/nitro/node-server.mjs:2375:19)
at async Server.toNodeHandle (./.output/server/chunks/nitro/node-server.mjs:2564:7)
[nuxt] [request error] [unhandled] [500] Cannot set headers after they are sent to the client
at new NodeError (node:internal/errors:405:5)
at ServerResponse.setHeader (node:_http_outgoing:648:11)
at setResponseHeaders (./.output/server/chunks/nitro/node-server.mjs:1871:20)
at ./.output/server/chunks/handlers/renderer.mjs:74:7
at async Object.handler (./.output/server/chunks/nitro/node-server.mjs:2375:19)
at async Server.toNodeHandle (./.output/server/chunks/nitro/node-server.mjs:2564:7)
Listening on http://[::]:8050
17:49:18:418 IM SDK [debug]: init Msync by connection
17:49:18:424 IM SDK [debug]: open
17:49:18:702 IM SDK [info]: httpType: https
17:49:19:157 IM SDK [debug]: websockt onOpen
17:49:19:250 IM SDK [debug]: dispatch event: onConnected
17:49:27:127 IM SDK [debug]: websocket onClose
17:49:27:128 IM SDK [debug]: dispatch event: onDisconnected
在未修改NEXTAUTH_URL下,监听启动一次后就无法再次启动了 修改了NEXTAUTH_URL就直接点不了了
我这边本地测试监听是没问题的,稍等一下,我测试一下 docker 环境下
我这边本地测试监听是没问题的,稍等一下,我测试一下 docker 环境下
说错了 都是启动一次后就无法再次启动了
还有NUXT_SECRET是?我赋了个随机uuid上去
我这边测试是没有问题的
我这边本地测试监听是没问题的,稍等一下,我测试一下 docker 环境下
说错了 都是启动一次后就无法再次启动了
还有NUXT_SECRET是?我赋了个随机uuid上去
ENV NODE_ENV=production ENV PORT=8050 ENV NUXT_SECRET="chaoxing-sign" ENV AUTH_ORIGIN="http://localhost:8050" ENV NEXTAUTH_URL="http://localhost:8050"
ENV DATABASE_URL="xxx"
你确保 Dockerfile 内容是否正确
我这边本地测试监听是没问题的,稍等一下,我测试一下 docker 环境下
说错了 都是启动一次后就无法再次启动了 还有NUXT_SECRET是?我赋了个随机uuid上去
ENV NODE_ENV=production ENV PORT=8050 ENV NUXT_SECRET="chaoxing-sign" ENV AUTH_ORIGIN="http://localhost:8050" ENV NEXTAUTH_URL="http://localhost:8050"
ENV DATABASE_URL="xxx"
你确保 Dockerfile 内容是否正确
Dockerfile的内容我没有修改过的
剩下就是schema加了那个target然后npx prisma generate了下
我感觉应该是nginx反代的锅了
不,这个自动监听跟反向代理没有关系
不,这个自动监听跟反向代理没有关系
大概点不了的时候浏览器就报告这个错误
Uncaught (in promise) Error: A listener indicated an asynchronous response by returning true, but the message channel closed before a response was received
你可以尝试重新构建一下镜像,
不,这个自动监听跟反向代理没有关系
大概点不了的时候浏览器就报告这个错误
Uncaught (in promise) Error: A listener indicated an asynchronous response by returning true, but the message channel closed before a response was received
浏览器是?版本?
因为在 createIMConnection 中需要修改 global 对象,或者说叫补环境。而这可能会导致浏览器一些对象(window,document) 被修改,我之前在测试这一步的时候就一直在反复测试
你可以尝试重新构建一下镜像,
不,这个自动监听跟反向代理没有关系
大概点不了的时候浏览器就报告这个错误
Uncaught (in promise) Error: A listener indicated an asynchronous response by returning true, but the message channel closed before a response was received
浏览器是?版本?
因为在 createIMConnection 中需要修改 global 对象,或者说叫补环境。而这可能会导致浏览器一些对象(window,document) 被修改,我之前在测试这一步的时候就一直在反复测试
Chrome/116.0.0.0
还有更详细的报错信息截图不?
我这里可以肯定的是 监听 和反向代理与环境配置没有直接关系
还有更详细的报错信息截图不?
我这里可以肯定的是 监听 和反向代理与环境配置没有直接关系
这也是重新构建镜像后的日志 截图: 点击了监听没有反应,只是一个摆设开关
Docker日志
Listening on http://[::]:8050
18:33:58:160 IM SDK [debug]: init Msync by connection
18:33:58:167 IM SDK [debug]: open
18:33:58:463 IM SDK [info]: httpType: https
18:33:58:944 IM SDK [debug]: websockt onOpen
18:33:59:64 IM SDK [debug]: dispatch event: onConnected
18:34:10:152 IM SDK [debug]: websocket onClose
18:34:10:153 IM SDK [debug]: dispatch event: onDisconnected
浏览器
稍等 我这边关闭一下我的 ssl测试一下,你部署在服务器上可能会是 ssl 证书的因素。
我排查了一下 也不是这个问题,很奇怪
稍等 我这边关闭一下我的 ssl测试一下,你部署在服务器上可能会是 ssl 证书的因素。
证书我用的是LetsEncrypt ZeroSSL的。acme生成的
你尝试一下换个浏览器,重新构建一个应用,重启服务看看 我这边环境是 chrome 112 与 Microsoft Edge 版本 114.0 本地 node 20 服务端 v16.15.0. (建议 18)
实际上是 node 这边在与某星(easemob-websdk)做 websocket 链接,因此很大概率会是 node 环境导致的。
从这个来看
Uncaught (in promise) Error: A listener indicated an asynchronous response by returning true, but the message channel closed before a response was received
应该触发了WebSocket链接,但是立马断开了,导致消息没有送出去即未双向连接。
稍等 我这边关闭一下我的 ssl测试一下,你部署在服务器上可能会是 ssl 证书的因素。
我排查了一下 也不是这个问题,很奇怪
我下了个火狐 火狐就有报错
稍等 我这边关闭一下我的 ssl测试一下,你部署在服务器上可能会是 ssl 证书的因素。 我排查了一下 也不是这个问题,很奇怪
我下了个火狐 火狐就有报错
点击展开,根据堆栈跳转到指定位置看看
不过题外话,我觉得现在针对自动监听就不是那么需求了,原因就是因为 手势、签到码、二维码这三个签到类型都需要相应提交信息(手势轨迹,签到码,二维码)。此时自动监听的意义就不是那么大了。且当前情况下自动监听不是那么稳定,存在断连,我从内心上来说都有点像移除该功能了。
而初衷则是委托一个小伙伴,而不用将自己的手机(客户端)交给他,随手打开一个网页,点击后稍等片刻,即可完成签到的任务。
稍等 我这边关闭一下我的 ssl测试一下,你部署在服务器上可能会是 ssl 证书的因素。 我排查了一下 也不是这个问题,很奇怪
我下了个火狐 火狐就有报错
点击展开,根据堆栈跳转到指定位置看看
刷新了之后又没有报这些错误了
随后服务端报这个
[nuxt] [request error] [unhandled] [500] Cannot set headers after they are sent to the client
at new NodeError (node:internal/errors:405:5)
at ServerResponse.setHeader (node:_http_outgoing:648:11)
at setResponseHeaders (./.output/server/chunks/nitro/node-server.mjs:1871:20)
at ./.output/server/chunks/handlers/renderer.mjs:74:7
at async Object.handler (./.output/server/chunks/nitro/node-server.mjs:2375:19)
at async Server.toNodeHandle (./.output/server/chunks/nitro/node-server.mjs:2564:7)
[nuxt] [request error] [unhandled] [500] Cannot set headers after they are sent to the client
at new NodeError (node:internal/errors:405:5)
at ServerResponse.setHeader (node:_http_outgoing:648:11)
at setResponseHeaders (./.output/server/chunks/nitro/node-server.mjs:1871:20)
at ./.output/server/chunks/handlers/renderer.mjs:74:7
at runNextTicks (node:internal/process/task_queues:60:5)
at process.processTimers (node:internal/timers:509:9)
at async Object.handler (./.output/server/chunks/nitro/node-server.mjs:2375:19)
at async Server.toNodeHandle (./.output/server/chunks/nitro/node-server.mjs:2564:7)
[nuxt] [request error] [unhandled] [500] Cannot set headers after they are sent to the client
at new NodeError (node:internal/errors:405:5)
at ServerResponse.setHeader (node:_http_outgoing:648:11)
at setResponseHeaders (./.output/server/chunks/nitro/node-server.mjs:1871:20)
at ./.output/server/chunks/handlers/renderer.mjs:74:7
at async Object.handler (./.output/server/chunks/nitro/node-server.mjs:2375:19)
at async Server.toNodeHandle (./.output/server/chunks/nitro/node-server.mjs:2564:7)
不过题外话,我觉得现在针对自动监听就不是那么需求了,原因就是因为 手势、签到码、二维码这三个签到类型都需要相应提交信息(手势轨迹,签到码,二维码)。此时自动监听的意义就不是那么大了。且当前情况下自动监听不是那么稳定,存在断连,我从内心上来说都有点像移除该功能了。
而初衷则是委托一个小伙伴,而不用将自己的手机(客户端)交给他,随手打开一个网页,点击后稍等片刻,即可完成签到的任务。
确实 但是这个东西 我不确定是不是监听和那个手势签到码一起出bug了 除了二维码我没有出现过输入手势和签到码的窗口
稍等 我这边关闭一下我的 ssl测试一下,你部署在服务器上可能会是 ssl 证书的因素。 我排查了一下 也不是这个问题,很奇怪
我下了个火狐 火狐就有报错
点击展开,根据堆栈跳转到指定位置看看
是否是因为直接调用了学习通的头像,导致混合内容。浏览器检测到不安全断开了ws
是否是因为直接调用了学习通的头像,导致混合内容。浏览器检测到不安全断开了ws
这也不太可能,因为ws 是在 node里跑的,如果是浏览器连某星的 websocket 服务的话,浏览器关了还怎么监听
是否是因为直接调用了学习通的头像,导致混合内容。浏览器检测到不安全断开了ws
这也不太可能,因为ws 是在 node里跑的,如果是浏览器连某星的 websocket 服务的话,浏览器关了还怎么监听
我用pnpm run dev运行也是这样子 也没有用反代
也是报[nuxt] [request error] [unhandled] [500] Cannot set headers after they are sent to the client
手势和签到码的弹窗功能现在是有的吗?
也是报[nuxt] [request error] [unhandled] [500] Cannot set headers after they are sent to the client
你贴一下你的环境变量 .env 以及你的 node 环境/ pnpm 环境,还有你安装依赖到运行的所有命令
手势和签到码的弹窗功能现在是有的吗?
有的,不过需要通过一键签到来触发,后续可能会针对这两个签到类型增加一个按钮,来针对指定课程签到(因为不同于二维码签到能获取到活动 id) 在帮助说明有说到
手势和签到码的弹窗功能现在是有的吗?
有的,不过需要通过一键签到来触发,后续可能会针对这两个签到类型增加一个按钮,来针对指定课程签到(因为不同于二维码签到能获取到活动 id) 在帮助说明有说到
我们有个老师签到完不结束活动的 现在一键签到老是弹那些旧二维码签到
不知道是不是这个把签到码覆盖掉了
我们有个老师签到完不结束活动的 现在一键签到老是弹那些旧二维码签到
不知道是不是这个把签到码覆盖掉了
woc,这个细节我没注意到,确实是这样的,当时写的比较匆忙,就只寻找第一个签到任务是签到码/手势的,就会导致该 bug。
按理来说后续我应该在批量操作框中 添加一个选择课程的按钮 然后只获取这个课程下的签到任务进行完成
一键签到的本质就是不进行判断,能签到的情况下就执行签到,所以没有考虑是否已签到过滤
也是报[nuxt] [request error] [unhandled] [500] Cannot set headers after they are sent to the client
你贴一下你的环境变量 .env 以及你的 node 环境/ pnpm 环境,还有你安装依赖到运行的所有命令
命令都是照着readme装的
你贴一下你的环境变量 .env 以及你的 node 环境/ pnpm 环境,还有你安装依赖到运行的所有命令 命令都是照着readme装的
你这环境有点抽象。。。
遇到 [nuxt] [request error] [unhandled] [500] Cannot set headers after they are sent to the client 这种情况,是连页面都无法进入是吧。
你贴一下你的环境变量 .env 以及你的 node 环境/ pnpm 环境,还有你安装依赖到运行的所有命令 命令都是照着readme装的
你这环境有点抽象。。。
node和pnpm需要哪个版本
电脑刚关 是手机ssh到服务器的
你贴一下你的环境变量 .env 以及你的 node 环境/ pnpm 环境,还有你安装依赖到运行的所有命令 命令都是照着readme装的
你这环境有点抽象。。。
遇到 [nuxt] [request error] [unhandled] [500] Cannot set headers after they are sent to the client 这种情况,是连页面都无法进入是吧。
没 只有监听不了的问题
[nuxt] [request error] [unhandled] [500] Cannot set headers after they are sent to the client
你贴一下你的环境变量 .env 以及你的 node 环境/ pnpm 环境,还有你安装依赖到运行的所有命令 命令都是照着readme装的
你这环境有点抽象。。。
node和pnpm需要哪个版本
电脑刚关 是手机ssh到服务器的
这两个问题不大。
有时候 nuxt 会抽风,你最好把 node_modules,.nuxt 文件夹,都删除,然后重新安装
[nuxt] [request error] [unhandled] [500] Cannot set headers after they are sent to the client
你贴一下你的环境变量 .env 以及你的 node 环境/ pnpm 环境,还有你安装依赖到运行的所有命令 命令都是照着readme装的
你这环境有点抽象。。。
node和pnpm需要哪个版本 电脑刚关 是手机ssh到服务器的
这两个问题不大。
有时候 nuxt 会抽风,你最好把 node_modules,.nuxt 文件夹,都删除,然后重新安装
我明天试一下吧
多谢大佬帮忙 搞到这么晚
这两个问题不大。 有时候 nuxt 会抽风,你最好把 node_modules,.nuxt 文件夹,都删除,然后重新安装
我明天试一下吧
多谢大佬帮忙 搞到这么晚
对了,我突然想起来我当时有写测试文件 im.test.ts
你在 .env 中添加 CX_USERNAME 和 CX_PASSWORD 两个变量,然后执行 npx vitest im
可以查看效果,我这边正好完善一下测试代码
这两个问题不大。 有时候 nuxt 会抽风,你最好把 node_modules,.nuxt 文件夹,都删除,然后重新安装
我明天试一下吧 多谢大佬帮忙 搞到这么晚
对了,我突然想起来我当时有写测试文件 im.test.ts
你在 .env 中添加 CX_USERNAME 和 CX_PASSWORD 两个变量,然后执行
npx vitest im
可以查看效果,我这边正好完善一下测试代码
一开始正常,到后面突然停止了
[nuxt] [request error] [unhandled] [500] Cannot set headers after they are sent to the client
你贴一下你的环境变量 .env 以及你的 node 环境/ pnpm 环境,还有你安装依赖到运行的所有命令 命令都是照着readme装的
你这环境有点抽象。。。
node和pnpm需要哪个版本 电脑刚关 是手机ssh到服务器的
这两个问题不大。
有时候 nuxt 会抽风,你最好把 node_modules,.nuxt 文件夹,都删除,然后重新安装
我删掉重新clone一遍,pnpm install然后又push了db,最后打包docker。还是一样不行
你的范例站点也不行 Chrome/Firefox也试过了
一开始正常,到后面突然停止了
这边我推送了新的代码,你重新拉去一下,出现 listen 加载中就说明正在处于监听中。
一开始正常,到后面突然停止了
这边我推送了新的代码,你重新拉去一下,出现 listen 加载中就说明正在处于监听中。
你需要执行以下命令
npx vitest im
Chrome/Firefox也试过了
这里的开始监听后,之前的任务是不会监听到的。我猜测你可能是想说为什么点击监听按钮后,而没有立马进行签到。该监听功能只有在开启后,有新的签到任务,才能够监听到并进行自动签到。
Chrome/Firefox也试过了
这里的开始监听后,之前的任务是不会监听到的。我猜测你可能是想说为什么点击监听按钮后,而没有立马进行签到。该监听功能只有在开启后,有新的签到任务,才能够监听到并进行自动签到。
并不是说立马进行签到,我详细说就是,第一次点击监听时,IM是有日志输出onConnected的。我发起的普通签到监听也能监听得到。然而我取消监听后再次监听时。网页显示确实是监听成功。但是点击监听的加载过程非常快,后台也没有任何日志。刷新网页后监听的心跳图标也没有显示。我发起的普通签到也没有被读取到
一开始正常,到后面突然停止了
这边我推送了新的代码,你重新拉去一下,出现 listen 加载中就说明正在处于监听中。
你需要执行以下命令
npx vitest im
忘记在取消监听逻辑中,将内容中 map 数据删除了
现已修复 https://github.com/kuizuo/chaoxing-sign/commit/e58ece3d2d34529094cfed45e7a493f21a4b7d45
并不是说立马进行签到,我详细说就是,第一次点击监听时,IM是有日志输出onConnected的。我发起的普通签到监听也能监听得到。然而我取消监听后再次监听时。网页显示确实是监听成功。但是点击监听的加载过程非常快,后台也没有任何日志。刷新网页后监听的心跳图标也没有显示。我发起的普通签到也没有被读取到
第二次为何加载很快是由于 在 map 中有找到监听的账号数据,就认为已经监听了,则不会进行后续操作。 而在取消监听只将 client 关闭,而忘记将 map 数据删除,就导致第二次数据没有重新建立新的连接。
node:18-alpine使用的是linux-musl-openssl-3.0.x 缺少了报错,添加了又好了
还有Docker中AUTH_ORIGIN似乎没生效。登录仍然会跳转回localhost