vue-cli 上的 socket.io 错误 Uncaught TypeError: exists is not a function

Posted

技术标签:

【中文标题】vue-cli 上的 socket.io 错误 Uncaught TypeError: exists is not a function【英文标题】:socket.io error on vue-cli Uncaught TypeError: exists is not a function 【发布时间】:2021-08-25 11:06:52 【问题描述】:

我已经使用 npm 在我的 vue-cli 项目中安装了 socket.io。 并像这样使用它:

import socketio from 'socket.io';
import VueSocketIO from 'vue-socket.io';

export const SocketInstance = socketio(MY_URL);

Vue.use(VueSocketIO, SocketInstance)

但是当我运行应用程序时,我得到了;

Uncaught TypeError: exists is not a function

控制台错误。没有应用程序运行。

谁能帮忙?

【问题讨论】:

【参考方案1】:

如果我参考官方的 vue-socket.io 文档,基本用法是这样的(以你的为例):

import Vue from 'vue'
import VueSocketIO from 'vue-socket.io'

Vue.use(new VueSocketIO(
    connection: MY_URL,
));

而且,如果你必须将 socket-io 实例传递给 vue-socket.io,你必须这样做:

import Vue from 'vue'
import VueSocketIO from 'vue-socket.io'
import SocketIO from 'socket.io-client'

const SocketInstance = SocketIO(MY_URL);

Vue.use(new VueSocketIO(
    connection: SocketInstance,
));

但是,在这种情况下,包不是socket.io,而是socket.io-client。问题可能来自于此。

编辑:

对于身份验证,如果我参考 socket.io 文档:https://socket.io/docs/v4/client-initialization/#Socket-options 和 vue-socket.io 的用法,这就是解决方案:

没有socket-io-client:

import Vue from 'vue'
import VueSocketIO from 'vue-socket.io'

Vue.use(new VueSocketIO(
    connection: MY_URL,
    options: 
        // authentication options
        auth : 
            token : 'qwerty',
        
    ,
));

使用 socket.io-client :

import Vue from 'vue'
import VueSocketIO from 'vue-socket.io'
import SocketIO from 'socket.io-client'

const SocketInstance = SocketIO(MY_URL, 
    // authentication options
    auth : 
        token : 'qwerty',
    
);

Vue.use(new VueSocketIO(
    connection: SocketInstance,
));

【讨论】:

谢谢,但是...我现在可以在哪里放置身份验证标头? 我已经根据 socket.io-client 文档编辑了我的回复以添加身份验证示例 还有...自定义标题怎么样? 阅读文档,我在回复中分享的链接中包含所有信息

以上是关于vue-cli 上的 socket.io 错误 Uncaught TypeError: exists is not a function的主要内容,如果未能解决你的问题,请参考以下文章

带有 ALB 和 Socket.IO 的 AWS ElasticBeanstalk 上的 HTTP 400 错误

(节点 js 上的 Socket.io)使用 mysql 数据更新 div 停止而不显示错误

WebSocketException上的Flutter Socket io错误:连接未升级到websocket

生产中的 Socket.io 返回 400 Bad Request 错误

Android 上的 Socket IO 连接失败

node.js 上的 Socket.io-client 只工作一次