如何将http服务器升级为websockets。监听传入的请求,以便我可以提供 HTML 页面?

问题描述 投票:0回答:1

我正在使用 websockets 和express js 制作一个两人游戏,文件夹的组织方式如下。

.
├── public
│   ├── board.html
│   ├── board.js
│   ├── chess.css
│   └── util.js
├── server
│   ├── game.js
│   ├── node_modules
│   ├── package.json
│   ├── package-lock.json
│   └── server.js
└── todo.md

所以,当我运行 node ./server/server.js 时。服务器在端口 8000 上运行并侦听,但没有任何显示。使其显示主页(board.html)。我必须访问 localhost:8000/board.html,但我不想要这样。

我的 server.js 看起来像这样。`

const http = require('http');
const express = require('express');
const cookieParser = require('cookie-parser');
const socketio = require('socket.io');
const { gameEnd, generateID } = require('./game.js');
let games = {};

const app = express();
app.use('/', express.static(`${__dirname}/../public/`));
app.use(cookieParser)

const server = http.createServer(app);
const io = socketio(server, {
    handlePreflightRequest: (req, res) => {
        const headers = {
            "Access-Control-Allow-Headers": "Content-Type, Authorization",
            "Access-Control-Allow-Origin": req.headers.origin, //or the specific origin you want to give access to,
            "Access-Control-Allow-Credentials": true
        };
        res.writeHead(200, headers);
        res.end();
    }
});
server.on('error', (err) => console.error(err));

server.listen(8000, () => {
    console.log('server is ready');
})

我希望我的应用程序在访问 localhost:8000 时立即显示 board.html。我可以做什么来实现这一目标?

我尝试将文件放在服务器文件夹之外并将它们放在根目录中,但没有成功。

javascript express websocket socket.io
1个回答
0
投票

由于您使用

app.use(express.static(
${__dirname}/../public/
));
Express 将 url 路径名映射到公共文件夹中的每个文件。

但是既然你想将

board.html
设置为主页,你就必须定义它。 为此,您可以在静态文件服务之后添加这行代码。 像这样的东西:

app.use(express.static(`${__dirname}/../public/`)); 

app.get('/', (req, res) => {
    res.sendFile(`${__dirname}/../public/board.html`);
});

© www.soinside.com 2019 - 2024. All rights reserved.