我正在创建一个快递服务器,它将在接收到邮寄请求后使index.html页面重定向到新页面。一切正常,但这只是第一次。我必须定期重新启动服务器才能使其正常工作。这是一些代码片段。
//server.js
const app = express();
app.use(express.static(`${__dirname}/public`));
const server = http.createServer(app);
const io = socketIo(server, {'force new connection': true });
io.on('connection', (socket) => {
console.log('New client connected');
app.post('/redirect', (req,res) => {
socket.emit('redirect');
res.status(200).send('Redirected');
});
});
<body>
<!-- Jquery CDN -->
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<!-- Socket.IO -->
<script src="/socket.io/socket.io.js"></script>
<script>
let socket = io.connect({'force new connection': true });
socket.on('connect', () => {
console.log('Connected to Server');
});
socket.on('redirect', () => {
window.location.replace("https://google.com");
});
</script>
</body>
答案 0 :(得分:1)
主要问题是,您的路由位于套接字连接侦听器内部。一条路线只能一次注册。并且connection
被多次触发。
const app = express();
app.use(express.static(`${__dirname}/public`));
const server = http.createServer(app);
const io = socketIo(server, {'force new connection': true });
app.post('/redirect', (req,res) => {
res.status(200).send('Redirected');
io.emit('redirect');
// io.to(someSocketOrRoom).emit('redirect');
});
io.on('connection', (socket) => {
console.log('New client connected');
});
如果您想在从套接字外部收到消息时向套接字发出消息,在这种情况下为HTTP Post。您需要使用io.emit
发出所有套接字,或使用io.to().emit
发出特定的套接字。
现在,使用socket.io重定向没有多大意义,如果要发布到/redirect
,为什么不使用res.redirect
重定向用户而不发出任何信息。