导入套接字时,为什么会出现此错误:“ TypeError:_websocket_js__WEBPACK_IMPORTED_MODULE_0 __。default.send不是函数”?

时间:2019-06-10 14:38:17

标签: redux websocket stomp

我是React / redux的新手,但是我试图用它来构建一个前端,该前端将通过RabbitMQ与后端接口。我有一个websockets.js文件,可在其中建立我的websocket和STOMP客户端:

import * as Stomp from 'stompjs';
var msgpack = require("msgpack-lite");

var onConn = () => {
  console.log('Successfully Connected');
  stompClient.subscribe('/queue/frontend-response', onMessage);
 //var params = { "params": "{}" };
 //var obj = JSON.stringify(msgpack.encode(params));
 //stompClient.send(
 //  '/exchange/product/product.request.find', 
 //  {'reply-to': 'frontend',  'correlation-id': 999}, 
 //  obj);
};

var onErr = (e) => {
  console.log('***************** Error:  ' + e);
};

function onMessage(msg) {
  console.log(msg);
}

var wss = new WebSocket("MY AMQP INSTANBCE");
var stompClient = Stomp.over(wss);
stompClient.connect(uname, pword, onConn, onErr, uname);

export default { stompClient }; 

如果我取消注释onConn中的代码,则将发送数据并正确接收到响应。但是,我希望此套接字可由需要与后端通信的任何组件导入。我的actions/index.js文件中有这个文件:

// src/js/actions/index.js
import stompClient from './websocket.js';
import { SET_PRODUCTS } from "../constants/action-types";

var msgpack = require("msgpack-lite");

export function setProducts(payload) {
  var params = { "params": "{}" };
  var obj = JSON.stringify(msgpack.encode(params));
  stompClient.send(
    '/exchange/product/product.request.find', 
    {'reply-to': 'frontend',  'correlation-id': 999}, 
    obj);
  return { type: SET_PRODUCTS, payload }
};

当前,当在UI中单击按钮时,将执行此代码。请注意,setProducts中的代码与websockets.js中可用的代码相同。但是在这里我没有得到任何数据,我得到了标题中提到的错误。

有人可以解释这里发生了什么,并提出一种可以在我的websockets.js文件之外进行此工作的方法吗?

1 个答案:

答案 0 :(得分:0)

叹息...我将export default { stompClient };更改为export default stompClient;,并且可以使用。