Skip to content
Snippets Groups Projects
Commit 4ce86282 authored by Ayc0's avatar Ayc0
Browse files

Remove express from server and split server / front

parent 80be87f3
Branches
No related tags found
No related merge requests found
{
"presets": ["es2015"]
}
src/bin/ww
public/
build/
node_modules/
build/
.cache/
{
"globals": {
"io": true,
"document": true
}
}
......@@ -8,12 +8,11 @@
<body>
<p>Welcome to socket.io at
<span id="date">
<%= (new Date()).toLocaleString() %>
</span>
</p>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.4/socket.io.slim.js"></script>
<script type="text/javascript" src="/javascripts/socket.js" type="module"></script>
<script type="text/javascript" src="./socket.js" defer></script>
</body>
</html>
\ No newline at end of file
const socketIO = io.connect('http://localhost:3000/');
socketIO.on('connect', () => {
setInterval(() => {
socketIO.emit('date');
}, 1000);
});
socketIO.on('date', (data) => {
document.getElementById('date').innerHTML = new Date(data.date).toLocaleString();
});
socketIO.on('message', (data) => {
console.log(data);
});
......@@ -5,23 +5,22 @@
"author": "Hermod",
"license": "MIT",
"scripts": {
"clean": "rm -rf node_modules",
"clean": "rm -rf node_modules build",
"start": "yarn start:dev",
"start:dev": "nodemon ./src/bin/www",
"start:prod": "node ./src/bin/www"
"start:dev": "nodemon ./server/index.js",
"start:prod": "node ./server/index.js",
"start:front": "parcel serve ./front/ -d build",
"build:front":
"rm -f build/* && parcel build ./front/ -d build --public-url / --no-cache && mv build/*.html build/index.html"
},
"dependencies": {
"body-parser": "~1.18.2",
"cookie-parser": "~1.4.3",
"debug": "~2.6.9",
"ejs": "~2.5.7",
"express": "~4.15.5",
"morgan": "~1.9.0",
"serve-favicon": "~2.4.5",
"node-fetch": "^2.0.0",
"parcel-bundler": "^1.5.1",
"socket.io": "^2.0.4"
},
"devDependencies": {
"babel-eslint": "^8.2.1",
"babel-preset-es2015": "^6.24.1",
"eslint": "^4.17.0",
"eslint-config-airbnb-base": "^12.1.0",
"eslint-plugin-import": "^2.8.0",
......
const fetch = require('node-fetch');
const io = require('socket.io')(3000);
/* const global = */
io.of('/').on('connection', (socket) => {
fetch('http://hermod.cs-campus.fr/api/v1/screen/1')
.then(res => res.json())
.then(res => socket.emit('message', res));
socket.on('date', () => {
socket.emit('date', { date: Date.now() });
});
});
const express = require('express');
const path = require('path');
const logger = require('morgan');
const cookieParser = require('cookie-parser');
const bodyParser = require('body-parser');
const index = require('./routes/index');
const app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
// uncomment after placing your favicon in /public
// app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', index);
// catch 404 and forward to error handler
app.use((req, res, next) => {
const err = new Error('Not Found');
err.status = 404;
next(err);
});
// error handler
app.use((err, req, res) => {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;
#!/usr/bin/env node
/**
* Module dependencies.
*/
const debug = require('debug')('src:server');
const http = require('http');
const socketIO = require('../socketIO');
const app = require('../app');
/**
* Normalize a port into a number, string, or false.
*/
function normalizePort(val) {
const port = parseInt(val, 10);
if (Number.isNaN(port)) {
// named pipe
return val;
}
if (port >= 0) {
// port number
return port;
}
return false;
}
/**
* Get port from environment and store in Express.
*/
const port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
/**
* Event listener for HTTP server "error" event.
*/
function onError(error) {
if (error.syscall !== 'listen') {
throw error;
}
const bind = typeof port === 'string' ? `Pipe ${port}` : `Port ${port}`;
// handle specific listen errors with friendly messages
switch (error.code) {
case 'EACCES':
console.error(`${bind} requires elevated privileges`);
process.exit(1);
break;
case 'EADDRINUSE':
console.error(`${bind} is already in use`);
process.exit(1);
break;
default:
throw error;
}
}
/**
* Create HTTP server.
*/
const server = http.createServer(app);
/**
* Event listener for HTTP server "listening" event.
*/
function onListening() {
const addr = server.address();
const bind = typeof addr === 'string' ? `pipe ${addr}` : `port ${addr.port}`;
debug(`Listening on ${bind}`);
}
/**
* Listen on provided port, on all network interfaces.
*/
server.listen(port);
server.on('error', onError);
server.on('listening', onListening);
socketIO(server);
(function () {
const socketIO = io.connect('http://localhost:3000/');
socketIO.on('connect', () => {
setInterval(() => {
socketIO.emit('date');
}, 1000);
});
socketIO.on('date', (data) => {
document.getElementById('date').innerHTML = new Date(data.date).toLocaleString();
});
}());
const express = require('express');
const router = express.Router();
/* GET home page. */
router.get('/', (req, res) => {
res.render('index');
});
module.exports = router;
const socketIO = require('socket.io');
module.exports = (server) => {
const io = socketIO(server);
io.on('connection', (socket) => {
socket.on('date', () => {
socket.emit('date', { date: Date.now() });
});
});
};
const interval = (fn, initialTTL, output = { id: null, clear: () => undefined }) => {
const timeoutID = setTimeout(async () => {
let TTL = fn();
if (TTL instanceof Promise) {
TTL = await TTL;
}
const nextTTL = parseInt(TTL, 10) || initialTTL;
interval(fn, nextTTL, output);
}, initialTTL);
output.id = timeoutID;
output.clear = () => clearTimeout(timeoutID);
return output;
};
module.exports = interval;
<h1><%= message %></h1>
<h2><%= error.status %></h2>
<pre><%= error.stack %></pre>
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment