чтоб на Raspberry Pi4 потянули.
Вот эта дичь не нужна!var email = $('#email').val(); var phone = $('#phone').val(); var text = $('#text').val();
<form id="sendEmail" action="#" method="POST">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
</div>
<div class="modal-body">
<input type="emal" class="form-control" name="email" placeholder="Email" required />
<input type="tel" class="form-control" name="phone" placeholder="Телефон" required />
<textarea class="form-control" name="text" cols="30" rows="10" placeholder="Сообщение" required></textarea>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Отмена</button>
<button type="submit" class="btn btn-primary">Отправить письмо</button>
</div>
</form>
$(document).ready(function(){
$("form#sendEmail").submit(function(event) {
event.preventDefault();
$.ajax({
type: "POST",
dataType: "html",
url: "page.php",
data: $(this).serializeArray(),
success: function(data) {
$(".modal-header").after(data);
}
});
});
});
(this.$refs.fileInput as HTMLElement).click()
let a1 = {
channelID: {
RegExp: ["\\d+", true],
description: "d1"
},
content: {
RegExp: [".+", true],
description: "d2"
}
};
type T1 = {[K in keyof typeof a1]: string}
type Args = {
[key: string]: {
RegExp: [string, boolean],
description: string
}
}
function createArgs<T extends Args>(args: T): T {
return args;
}
type TStringKeys<T extends Args> = {[K in keyof T]: string};
let a1 = createArgs({
channelID: {
RegExp: ["\\d+", true],
description: "d1"
},
content: {
RegExp: [".+", true],
description: "d2"
}
});
type T1 = TStringKeys<typeof a1>
К сожалению на текущий момент(ts4.2.3) избавиться от функции-обёртки не получится. routes[window.location.pathname];
вернёт ошибку, поскольку ты будешь использовать тип string, которого в объекте нет (только заданные ключи), либо использовать тип { [key: string]: string }
. return getValue(objectValus[prop], property);
const getValue = (obj, key) => Object
.values(obj ?? {})
.reduce((found, n) => found ?? getValue(n, key), obj?.[key]);
// https://socket.io/docs/v4/server-initialization/
import * as Server from 'socket.io'
const io = Server()
io.listen(3000)
// коллекция сокет-подключений
const connections = new Set()
// когда Socket.io сервер словил новое подключение
io.on('connection', (s) => {
// добавляем это подключение в коллекцию
connections.add(s)
// слушаем событие отключения сокета и реагируем на него
s.once('disconnect', () => {
// удаляем данное сокет-подключение из коллекции
connections.delete(s)
})
})
// connections.size - покажет размер коллекции, то есть количество подключенных клиентов к серверу Socket.io (онлайн на сайте в вашем случае)
// https://socket.io/docs/v4/server-instance/#Server-engine
io.engine.clientsCount
// или:
// https://socket.io/docs/v4/server-api/#namespace-allSockets
await io.allSockets()