Я пытался создать приложение для чата в реальном времени, для этого я использовал сервер экспресс-узлов и перерисовывал с Laravel.
Вот мой код server.js
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
var redis = require('redis');
server.listen(8000);
io.on('connection', function (socket) {
console.log("client connected");
var redisClient = redis.createClient();
redisClient.subscribe('message');
redisClient.on("message", function(channel, data) {
console.log("mew message add in queue "+ data['message'] + " channel");
socket.emit(channel, data);
});
socket.on('disconnect', function() {
redisClient.quit();
});
});
После того, как я вошел в систему, когда я захожу в / home route, я вижу следующую ошибку:
Cannot GET /home
Вот код home.blade.php:
@extends('layouts.app')
@section('content')
<script src="//code.jquery.com/jquery-1.11.2.min.js"></script>
<script src="//code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<script src="https://cdn.socket.io/socket.io-1.3.4.js"></script>
<style type="text/css">
#messages{
border: 1px solid black;
height: 300px;
margin-bottom: 8px;
overflow: scroll;
padding: 5px;
}
</style>
<div class="container spark-screen">
<div class="row">
<div class="col-md-10 col-md-offset-1">
<div class="panel panel-default">
<div class="panel-heading">Chat Message Module</div>
<div class="panel-body">
<div class="row">
<div class="col-lg-8" >
<div id="messages" ></div>
</div>
<div class="col-lg-8" >
<form action="sendmessage" method="POST">
<input type="hidden" name="_token" value="{{ csrf_token() }}" >
<input type="hidden" name="user" value="{{ Auth::user()->name }}" >
<textarea class="form-control msg"></textarea>
<br/>
<input type="button" value="Send" class="btn btn-success send-msg">
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
var socket = io.connect('http://localhost:8000');
socket.on('message', function (data) {
data = jQuery.parseJSON(data);
console.log(data.user);
$( "#messages" ).append( "<strong>"+data.user+":</strong><p>"+data.message+"</p>" );
});
$(".send-msg").click(function(e){
e.preventDefault();
var token = $("input[name='_token']").val();
var user = $("input[name='user']").val();
var msg = $(".msg").val();
if(msg != ''){
$.ajax({
type: "POST",
url: '{!! URL::to("sendmessage") !!}',
dataType: "json",
data: {'_token':token,'message':msg,'user':user},
success:function(data){
console.log(data);
$(".msg").val('');
}
});
}else{
alert("Please Add Message.");
}
})
</script>
@endsection
Я начал свой проект на 8000-м порту. Может кто-нибудь помочь мне выяснить, в чем здесь Ошибка?
У вас нет маршрута /home
в вашем экспресс-приложении. Вам нужно добавить маршрут к вашему приложению, чтобы он знал, чтобы обрабатывать все GET
запросы к /home
Добавьте ниже маршрут к server.js
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
var redis = require('redis');
// Handle GET requests to /home
app.get('/home', (req, res) => {
// handle request, respond accordingly
});
server.listen(8000);
io.on('connection', function (socket) {
console.log("client connected");
var redisClient = redis.createClient();
redisClient.subscribe('message');
redisClient.on("message", function(channel, data) {
console.log("mew message add in queue "+ data['message'] + " channel");
socket.emit(channel, data);
});
socket.on('disconnect', function() {
redisClient.quit();
});
});
Других решений пока нет …