Search code examples
javascriptc9.io

Setting up node js server with c9.io


I'm having a hard time trying to set up a node server to run a simple app on c9.io. First of all, the server is running no problems on localhost, but for a reason c9 renders the html, but doesn't use the socket.io.. This is my code:

App.js

const http = require('http');
const socketio = require('socket.io');
const express = require('express');

const app = express();
const server = http.createServer(app);
const io = socketio.listen(server);

app.get('/', (req, res) => res.sendFile(`${__dirname}/client/index.html`))

io.on('connection', socket => {
    socket.on('move', data => {
        io.emit('move', data)
    })
})

server.listen(process.env.PORT || 3000, process.env.IP || "0.0.0.0", () => {
  const addr = server.address();
  console.log("Chat server listening at", `${addr.address}:${addr.port}`);
});

index.html

<!doctype html>
<html lang="en" ng-app>
  <head>
    <title>Chat Example</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="/css/bootstrap.min.css">
    <link rel="stylesheet" href="/css/bootstrap-responsive.min.css">
    <style>
      body {
        padding-top: 60px;
      }
    </style>
    <script>
    const socket = io.connect('https://socket-alexcnu.c9users.io/');   /* global io $*/ 

    $(document).on('mousemove', e => {
        let data = {x: e.pageX - 10 , y: e.pageY - 10}
        $('div').css({
           left:  e.pageX - 10,
           top:   e.pageY - 10
        });

        socket.emit('move', data)
    });

    socket.on('move', data => {
        console.log(data.x);
         $('div').css({
           left: data.x,
           top: data.y
        });
    })

    </script>
  </head>
  <body>
   <div style = 'height: 20px; width: 20px; background: orange; position:absolute; float:left'></div>

  </body>
      <script src="/socket.io/socket.io.js"></script>
    <script src="/js/jquery.min.js"></script>
</html>

c9 console

alexcnu:~/workspace $ node app
   info  - socket.io started
Chat server listening at 0.0.0.0:8080
   debug - served static content /socket.io.js

Google Chrome Console

https://socket-alexcnu.c9users.io/css/bootstrap-responsive.min.css Failed to load resource: the server responded with a status of 404 (Not Found)
https://socket-alexcnu.c9users.io/css/bootstrap.min.css Failed to load resource: the server responded with a status of 404 (Not Found)
socket-alexcnu.c9users.io/:14 Uncaught ReferenceError: io is not defined
2https://socket-alexcnu.c9users.io/js/jquery.min.js Failed to load resource: the server responded with a status of 404 (Not Found)
https://socket-alexcnu.c9users.io/css/bootstrap-responsive.min.css Failed to load resource: the server responded with a status of 404 (Not Found)
https://socket-alexcnu.c9users.io/css/bootstrap.min.css Failed to load resource: the server responded with a status of 404 (Not Found)

Solution

  • The following works for me:

    <!doctype html>
    <html lang="en" ng-app>
      <head>
        <title>Chat Example</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
        <script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>
        <style>
          body {
            padding-top: 60px;
          }
        </style>
        <script>
        const socket = io.connect('https://socket-alexcnu.c9users.io/');   /* global io $*/ 
    
        $(document).on('mousemove', e => {
            let data = {x: e.pageX - 10 , y: e.pageY - 10}
            $('div').css({
               left:  e.pageX - 10,
               top:   e.pageY - 10
            });
    
            socket.emit('move', data)
        });
    
        socket.on('move', data => {
            console.log(data.x);
             $('div').css({
               left: data.x,
               top: data.y
            });
        })
    
        </script>
      </head>
      <body>
       <div style = 'height: 20px; width: 20px; background: orange; position:absolute; float:left'></div>
    
      </body>
    </html>