2017-01-20 50 views
1

我正在使用Laravel Event Broadcasting,并且我正在使用pusher驱动程序进行广播事件并且其工作完美。Laravel生成一个错误“Echo is Echo is not defined”

公共通道被成功地从客户端使用推进器提供js

var pusher = new Pusher('xxxxxxxxxxxxxxxxxxxxx_my_app_key', { 
    encrypted: true 
}); 

var channel = pusher.subscribe('TestPusher'); 
    channel.bind('App\\Events\\TestPusher', function(data) { 
alert(data.msg); 
}); 

订阅但是当我在我的客户端代码

Echo.channel('TestPusher') 
    .listen('TestPusher', (e) => { 
     console.log(e.msg, e.chatMessage); 
    }); 

它生成错误使用echo“回声不定义“。

我已经在我的应用程序中使用npm install --save laravel-echo pusher-js安装了Laravel Echo库,并且还根据laravel提供的文档在resources/assets/js/bootstrap.js文件中包含以下代码。

import Echo from "laravel-echo" 

window.Echo = new Echo({ 
    broadcaster: 'pusher', 
    key: 'xxxxxxxxxxxxxxxxxxxxx_my_app_key' 
}); 

所以请帮助我如何解决这个问题。

+1

看看这个[链接](https://mattstauffer.co/blog/introducing-laravel-echo)。你有火花使用它。 – JUL2791

+0

感谢@iDroid,但我已经尝试过这个链接,但不能为我工作你能给我具体的解释吗? –

+1

如果你还没有这样做,你应该尝试使用gulp来编译你的资产。 –

回答

0

几天前我有这个问题。我的大部分安装都搞砸了,Laravel的版本管理也没有帮助。

很抱歉,如果这没有帮助,这只是我的经验,尽可能最详尽的:

首先,我会考虑你对JS/app.js包含在你的网站的脚本。

现在,你看到了这个错误,因为正如Josh提到的那样,你并没有编译你的js文件。在编辑'resources/assets/js/bootstrap.js'后,需要通过在Laravel 5.3中运行资产编译器gulp(命名为Laravel Elixir docs/5.3/elixir)来编译此文件。

如果您仔细地关注了本教程的这一部分,您应该特别小心laravel的npm依赖版本,特别是那些由Elixir使用的版本(即使没有错误消息,我的gulp安装仍然无法工作)。

因此,如果这是一个新项目,您应该考虑更新到Laravel 5.4。如果你不能或不愿意更新所有的Laravel框架,也许这可以像我一样解决。留在5.3,但在5.4上使用最新的资产编译器,名为Laravel Mix。现在它运行在npm:npm run dev。 (DOC上没有提到一饮而尽。)

要做到这一点,你应该更新latest package.json on 5.4遵循 5.4文档来安装Laravel混合。

+0

感谢您的回答@alecuys其实我已经修复它,问题是,我实际上在我的页面底部加载了我的'js/app.js'脚本,并且试图在实际脚本加载之前获取echo实例的功能:P –

+0

太棒了!所以一口气运行良好。做得好!! – alecuys

0

你的代码看起来不错,问题是你的JS为了使只有你得到不确定的问题

<script> 
Echo.channel('TestPusher') 
    .listen('TestPusher', (e) => { 
     console.log(e.msg, e.chatMessage); 
    }); 
</script> 


<script src="echo.js"></script> 

如此曲折的顺序:)每个ECHO之前

+0

感谢@kali达斯我解决了它,是的我的js命令的问题 –

0

寡妇对象。

window.Echo.channel('TestPusher') 
    .listen('TestPusher', (e) => { 
     console.log(e.msg, e.chatMessage); 
    }); 
0

我的问题是,我没有与代码的其余部分编译bootstrap.js在一起,因为我已经从app.js删除线require('./bootstrap')。我添加了这条线,我回家了,干了。 As described here

相关问题