Node.js 节点js/socket/verify不是一个函数

Node.js 节点js/socket/verify不是一个函数,node.js,socket.io,Node.js,Socket.io,Hello想了解导致此错误的原因: 这不是一个函数 (我错过了什么让它发生) 我正试图通过以下方式连接io套接字来验证我的jwt: io.use(verify.authSocket(socket) .on('connection', function(socket) { socket.on('message', function(message) { io.emit('message', message); }); })); 这是mt v

Hello想了解导致此错误的原因: 这不是一个函数 (我错过了什么让它发生)

我正试图通过以下方式连接io套接字来验证我的jwt:

  io.use(verify.authSocket(socket)
  .on('connection', function(socket) {
      socket.on('message', function(message) {
          io.emit('message', message);
      });
  }));
这是mt verify.authSocket:

const jwt = require('jsonwebtoken');
const User = require('../models/User')
const config= require('../config/dbconfig');
const moment = require('moment');

module.exports = {
    async authSocket(socket,next){
        const token = socket.handshake.query.token;
        if(!token) return next(new Error('Unauthorized'));
        try{
            const decoded = jwt.verify(token,config.secretToken);
            if(decoded){    
                next();
            }else{
                next(new Error('Authentication error')); 
            }
        }catch(error){
            console.error(error);
        }
    }
}
错误:

C:\Users\SpiriT\Documents\Projetos\FtcJokenPo\back\src\app.js:25
  .on('connection', function(socket) {
   ^

TypeError: verify.authSocket(...).on is not a function
    at Object.<anonymous> (C:\Users\SpiriT\Documents\Projetos\FtcJokenPo\back\src\app.js:25:4)
C:\Users\SpiriT\Documents\Projetos\FtcJokenPo\back\src\app.js:25
.on('connection',函数(套接字){
^
TypeError:验证上的.authSocket(…)。不是函数
at对象。(C:\Users\SpiriT\Documents\Projetos\FtcJokenPo\back\src\app.js:25:4)
我正在试图理解是什么导致了这个错误


我以为我的verify.authsocket是一个函数,有人能给我解释一下并帮我修复这个错误吗?

verify.authsocket
确实是一个函数。错误告诉你从
verify.authsocket
返回的值不是一个函数,因此错误消息中出现了
(…)

 io.use(verify.authSocket(socket)) // added )
  .on('connection', function(socket) {
      socket.on('message', function(message) {
          io.emit('message', message);
      });
  });
在代码中,您将
.on
附加到
verify.authSocket
的返回值,而不是将其添加到
io

请记住,虽然错误是相似的,但它们并不相同:

  • TypeError:verify.authSocket(…)不是函数
    表示
    verify.authSocket的返回值不是函数
  • TypeError:verify.authSocket(…).on不是函数
    表示
    verify.authSocket的返回值没有作为函数的
    .on属性
  • TypeError:verify.authSocket不是函数
    表示
    verify.authSocket
    不是函数

在任何情况下,
io.use
需要一个
函数
作为参数,而您没有传递参数。
verify.authSocket
必须返回一个有效的中间件或仅返回一个

所以只需使用:
verify.authSocket
而不是
verify.authSocket(socket)


似乎在
io.use(verify.authSocket(socket))中缺少“')”
真的天哪,我有一个错误,我不知道哪里出了问题,我相信是在我的前端:WebSocket连接到'ws://localhost:8080/socket.io/?token=%22eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyjzdwiijismvtywlsijoiagfi9vz3jvgqgdtywlslvbsisimbwluij0cnvlljjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjf4s1aYMpRd1YDypQe0%22&EIO=3&transport=websocket&sid=Jvwaf_byTlNReqYBAAAA'失败:在websocket握手过程中出错:net::ERR_CONNECTION_reset在我的后端我收到此错误:C:\Users\SpiriT\Documents\Projetos\FtcJokenPo\back\node_modules\socket.io\lib\namespace.js:124 fns[i](socket,function(ERR){)^TypeError:fns[i]这不是一个函数。你能帮我吗?检查我的答案,错误已经解释好了。非常感谢兄弟,如果我有错误并且无法返回未处理的消息(节点:19004)PromiseEjectionWarning:TypeError:无法读取Object.authSocket的undefined属性“query”,那么我就得到了它并设法进入我的(解码)(C:\Users\SpiriT\Documents\Projects\FtcJokenPo\back\src\auth\index.js:42:40)位于套接字。(C:\Users\SpiriT\Documents\Projects\我建议为该错误添加一个新问题,因为它超出了第一个问题的范围。我还必须查看第42行上的内容。我设法解决了这个问题,因为第二个函数调用了我的“连接”,但我的middlware仍然存在一个问题,它会进行身份验证,但当它到达我的socket.on('消息'时不会输入,如果您能帮助我:不知何故,当我进入middlware时,我已经登录了(我对此进行了一些测试,不是在我验证jwt之后)
io.use(verify.authSocket)
  .on('connection', function(socket) {
      socket.on('message', function(message) {
          io.emit('message', message);
      });
  });