NodeJS - socket.on не вызывается - PullRequest
0 голосов
/ 16 февраля 2019

Я использую метод POST Node.JS для отправки формы на мой сервер.Передается на сервер нормально;На этом этапе никаких проблем не возникает.Однако, когда я использую io.emit с socket.io для передачи данных обратно клиенту, на стороне клиента ничего не происходит.Ничего не выводится на консоль, и я не получаю ошибок там или в командной строке (откуда я запускаю сервер).

index.html:

<form id="schoolCreateForm" action="http://localhost:3000/createSchool" method="POST">
    School name: <input name="schoolName" type="text"><br><br>
    Private?: <input name="schoolPrivate" type="checkbox"><br><br>
    Entry password: <input name="entryPassword" type="password"><br><br>
    <button type="submit">Submit</button>
</form>

<script>
    var socket = io();
    socket.on('updateSchool', function(response) {
        console.log(response);
        document.getElementById("headerSchoolName").innerHTML = data.schoolName;
    });
</script>

app.js:

var express = require('express');
var app = express();
var serv = require('http').Server(app);
var io = require('socket.io')(serv);

var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({extended:false}));
app.use(bodyParser.json());

app.post('/createSchool', function(req, res) {
    response = {
        school_name: req.body.schoolName,
        school_private: req.body.schoolPrivate,
        entry_password: req.body.entryPassword
    };
    console.log(response);

    res.sendFile(__dirname + '/client/index.html');

    io.emit('updateSchool', response);
});

serv.listen(3000);
console.log("Server started on localhost://3000");

Кто-нибудь знает, что происходит?

1 Ответ

0 голосов
/ 16 февраля 2019
<form  action="http://localhost:3000/createSchool" method="POST">
School name: <input name="schoolName" type="text"><br><br>
Private?: <input name="schoolPrivate" type="checkbox"><br><br>
Entry password: <input name="entryPassword" type="password"><br><br>
<button type="submit" id="schoolCreateForm">Submit</button>

После отправки данных формы она перезагрузит вашу страницу, это означает, что соединение с сокетом будет разорвано.Если вы хотите увидеть ответ с сокетом, сделайте запрос ajax.post без перезагрузки страницы.

<form id="schoolCreateForm">
School name: <input name="schoolName" type="text"><br><br>
Private?: <input name="schoolPrivate" type="checkbox"><br><br>
Entry password: <input name="entryPassword" type="password"><br><br>
<button type="submit">Submit</button>
</form>

<script>
   document.querySelector('#schoolCreateForm').addEventListener('click', 
   function(e) {
     e.proventDefault() // this line will not all to reload page after 
                       /// submitting the 
                       //form data
 ### writh you ajax request functionality here 

  })
var socket = io();
socket.on('updateSchool', function(response) {
    console.log(response);
    document.getElementById("headerSchoolName").innerHTML = data.schoolName;
});

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...