После отправки на сервер группы запросов POST/GET мой сервер перестает отвечать, и на вкладке сети консоли все запросы помечаются как «ожидающие».
У меня есть временные метки во время ответов, но они идут быстро и просто не запускаются, как только возникает проблема.
Разорвать:
var ip = require('ip');
var fs = require('fs');
var bodyParser = require('body-parser');
var path = require('path');
var express = require('express');
var app = express();
var expressWs = require('express-ws')(app);
var students = [];
var cons = [];
app.use(bodyParser.text({
extended: true
}));
app.post('/add', function(req, res) {
students.push(req.body);
for (var i = 0; i < cons.length; i++) {
cons[i].send(JSON.stringify(students));
}
});
app.post('/del', function(req, res) {
for (var i = 0; i < students.length; i++) {
if (students[i] == req.body) {
students.splice(i, 1);
}
}
for (var i = 0; i < cons.length; i++) {
cons[i].send(JSON.stringify(students));
}
});
app.get('/students', function(req, res) {
res.send(JSON.stringify(students));
});
app.ws('/mes', function(ws, req) {
cons.push(ws);
ws.on('close', function(req) {
for (var i = 0; i < cons.length; i++) {
if (cons[i] == ws) {
cons.splice(i, 1);
}
}
});
});
Отправитель:
function sendData() {
if (okMes() == true) {
console.info(student_i.value);
fetch('/add', {
method: 'POST',
body: student_i.value
})
.catch(function(err) {
console.error(err);
});
student_i.value = '';
}
}
Получатель:
function placeButton(data) {
if (data.length == 0) {
error_p.style.display = 'block';
error_p.innerHTML = 'No New Students';
}
for (var i = 0; i < 200; i++) {
if (document.getElementById(i) != null) {
document.getElementById(i).remove();
}
}
students = [];
for (var i = 0; i < data.length; i++) {
student = document.createElement('button');
student.innerHTML = data[i];
students_d.appendChild(student);
students.push(student);
student.setAttribute('id', students.length - 1);
error_p.style.display = 'none';
}
for (var i = 0; i < students.length; i++) {
students[i].onclick = function() {
for (var i = 0; i < students.length; i++) {
if (students[i] == this) {
students.splice(i, 1);
}
}
// document.getElementById(this.getAttribute('id')).remove();
fetch('/del', {
method: 'POST',
body: this.innerHTML
});
if (document.querySelectorAll('button') == []) {
error_p.style.display = 'block';
error_p.innerHTML = 'No New Students';
}
}
}
}
// seting interval and fetching for '/students' and calling this func
// reciving ws.onmessage and calling this func
Я понятия не имею, почему на мои запросы не отвечают, и если бы кто-нибудь мог помочь, это было бы здорово.
Я не запускаю свой сервер на HTTPS, и когда я иду по этим маршрутам, я получаю ответ.
Что выводит консоль на стороне сервера?
Я просто регистрирую URL-адрес, по которому он работает прямо сейчас. Если вас интересует время, когда все они произошли одновременно, и когда возникла проблема, они перестали регистрироваться. Обновлено: я сделал временные метки после каждой строки, и все это произошло, когда эта функция была вызвана, не все строки в несвязанных функциях были зарегистрированы.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Fetch API ожидает полного url. Измените свой вызов fetch на:
// assuming you're running on localhost on port 3000
fetch('http://localhost:3000/del', {
method: 'POST',
body: this.innerHTML
});
Я сделал это, и не имеет значения, добавляю я это или нет.
какая у тебя cons[i].send?
Он отправляет данные на все соединения ws.
Я только что понял ответ, тестируя свой код. Оказалось, что я этого не делал res.end() при обработке почтовых запросов, и я предполагаю, что время ожидания запросов истекло.
Вы используете сервер с HTTPS? Попробуйте добраться до одного из маршрутов, скопировав адрес и вставив его в окно браузера. Возможно, вы увидите, что запросы блокируются из-за недействительного SSL-сертификата, и вам нужно вручную разрешить браузеру обходить защиту.