Как создать приложение для видео-чата с сокетом, которое выполняет следующие действия:
-Server.js имеет массив с именем ids
-Установочный знак в app.get для «получения»URL-адрес пользователя и разделить путь после имени хоста (hostname / *)
-Если выделенный URL-адрес не существует в идентификаторах, генерируется случайная строка, которая помещается в массив идентификаторов
-Созданиеновый видео-чат и отправляет туда этого пользователя
-Этот новый видео-чат может быть подключен только еще одним пользователем с указанным идентификатором в URL (hostname / id)
-Когда оба пользователя отключаются,id удаляется из массива, а чат также удаляется
Я попытался сгенерировать новый html-файл с помощью fs (путем копирования и переименования), но не могу перенаправить пользователя на новый файл. Я могу перенаправлять только на существующие страницы из моего собственного домена или доменов других людей, но не во вновь созданный HTML-файл. Я получаю «внутреннюю ошибку сервера», когда пытаюсь это сделать. Может быть, удалить новый файл, как только оба отключены? Fs делает свою работу в создании файла HTML, но я не могу перенаправить его сразу после его создания.
(Да, есть ejs, но я надеюсь разрешить пользователям подключаться с помощью URL-адресов. URL-адреса должны быть случайными.)
Вот коды.
const express = require('express')
const app = express()
const http = require('http').Server(app)
const io = require('socket.io')(http)
const port = process.env.PORT || 3000
const nanoid = require('nanoid')
const path = require('path');
const fs = require('fs-extra');
var randomID = nanoid();
var ids= [];
app.use("/styles", express.static(__dirname + '/public/css'));
app.use("/scripts", express.static(__dirname + '/public/js'));
//otherwise, css and client js will not run
app.get('/*',function(req,res){
var origin = req.url.slice(-21);
if(ids.includes(origin)===false){
ids.push(randomID);
fs.copySync('public/index.html', "public/"+randomID+".html");
//It works if I redirect to internal and external existing pages
//var destination = '<script>window.location.href=' + '"' +"https://www.google.com.my/imghp?hl=en&tab=wi&ogbl"+ '";</script>';
//var destination = '<script>window.location.href=' + '"' +"/-cVHe8n64LGFxOzh9YNcH.html"+ '";</script>';
var destination = '<script>window.location.href=' + '"' +"/"+ randomId+'.html";</script>';
//but the server says internal server error
console.log(destination);
console.log(urls);
res.send(destination);
}
});
let clients = 0
//Only two devices can be in the same page at the same time
io.on('connection', function (socket) {
socket.on("NewClient", function () {
if (clients < 2) {
if (clients == 1) {
this.emit('CreatePeer');
}
}
else
this.emit('SessionActive')
clients++;
})
socket.on('Offer', SendOffer)
socket.on('Answer', SendAnswer)
socket.on('disconnect', Disconnect)
})
function Disconnect() {
if (clients > 0) {
if (clients <= 2)
this.broadcast.emit("Disconnect");
clients--
}
else {
//delete the file once both are gone
urls.splice(urls.indexOf(randomID), 1 );
console.log(urls);
fs.removeSync('public/index.html', "public/"+randomID+".html");
}
}
function SendOffer(offer) {
this.broadcast.emit("BackOffer", offer)
}
function SendAnswer(data) {
this.broadcast.emit("BackAnswer", data)
}
http.listen(port, () => console.log(`Active on ${port} port`))
Я серьезно потерян.