Веб-сокеты: внешние css & js не работают - PullRequest
0 голосов
/ 14 ноября 2018

Почему внешние таблицы стилей / скрипты не распознаются?Встроенный css / js работает нормально.


Файлы

  • node_modules
  • package.json
  • index.html
  • main.css
  • images
  • script.js
  • server.js

server.js

var app = require('http').createServer(handler),
    io = require('socket.io').listen(app),
    fs = require('fs')

app.listen(8888);

function handler(req, res) {
    //    console.log(__dirname + 'index.html');
    fs.readFile(__dirname + '/index.html',
        function (err, data) {
            if (err) {
                res.writeHead(500);
                return res.end('Error loading index.html');
            }

            res.writeHead(200);
            res.end(data);
        });
}

var lastPosition = {
    x: 0,
    y: 0
}; // whatever default data

io.sockets.on('connection', function (socket) {
    socket.emit('update_position', lastPosition);
    socket.on('receive_position', function (data) {
        lastPosition = data;
        socket.broadcast.emit('update_position', data); // send `data` to all other clients
    });
});

1 Ответ

0 голосов
/ 15 ноября 2018

Я настоятельно рекомендую вам использовать Express для реализации http-сервера.Однако, если вы действительно хотите придерживаться встроенных библиотек, вы должны сделать что-то подобное, чтобы также обслуживать внешние файлы:

const fs = require('fs');
const http = require('http');
const path = require('path');
const app = http.createServer(handler);

app.listen(8888, function () {
  console.log('Server started listening.');
});

function handler(req, res) {
  const requestPath = req.url.substring(1) || 'index.html';
  const filePath = path.join(__dirname, requestPath);

  fs.readFile(filePath, 'utf8', function (err, contents) {
    if (err) {
      res.writeHead(404);
      res.end('<h1>Not Found</h1>');
    } else {
      res.writeHead(200);
      res.end(contents);
    }
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...