Init Express, Pug, Sass, Sequelize, Socket.io
This commit is contained in:
parent
2dce6bb719
commit
4f3447b2e4
14 changed files with 3312 additions and 0 deletions
46
app.js
Normal file
46
app.js
Normal file
|
@ -0,0 +1,46 @@
|
|||
let createError = require("http-errors");
|
||||
let express = require("express");
|
||||
let path = require("path");
|
||||
let cookieParser = require("cookie-parser");
|
||||
let logger = require("morgan");
|
||||
let sassMiddleware = require("node-sass-middleware");
|
||||
|
||||
let indexRouter = require("./routes/index");
|
||||
|
||||
let app = express();
|
||||
|
||||
// view engine setup
|
||||
app.set("views", path.join(__dirname, "views"));
|
||||
app.set("view engine", "pug");
|
||||
|
||||
app.use(logger("dev"));
|
||||
app.use(express.json());
|
||||
app.use(express.urlencoded({ extended: false }));
|
||||
app.use(cookieParser());
|
||||
app.use(sassMiddleware({
|
||||
src: path.join(__dirname, "public"),
|
||||
dest: path.join(__dirname, "public"),
|
||||
indentedSyntax: true, // true = .sass and false = .scss
|
||||
sourceMap: true
|
||||
}));
|
||||
app.use(express.static(path.join(__dirname, "public")));
|
||||
|
||||
app.use("/", indexRouter);
|
||||
|
||||
// catch 404 and forward to error handler
|
||||
app.use((req, res, next) => {
|
||||
next(createError(404));
|
||||
});
|
||||
|
||||
// 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;
|
102
bin/www
Executable file
102
bin/www
Executable file
|
@ -0,0 +1,102 @@
|
|||
#!/usr/bin/env node
|
||||
|
||||
/**
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
const app = require("../app");
|
||||
const debug = require("debug")("letu:server");
|
||||
const http = require("http");
|
||||
const models = require("../models");
|
||||
|
||||
/**
|
||||
* Get port from environment and store in Express.
|
||||
*/
|
||||
|
||||
let port = normalizePort(process.env.PORT || "3000");
|
||||
app.set("port", port);
|
||||
|
||||
/**
|
||||
* Create HTTP server.
|
||||
*/
|
||||
|
||||
let server = http.createServer(app);
|
||||
|
||||
/**
|
||||
* Create socket.io server
|
||||
*/
|
||||
|
||||
const io = require("socket.io")(server);
|
||||
io.on("connection", require("../sockets"));
|
||||
|
||||
/**
|
||||
* Listen on provided port, on all network interfaces.
|
||||
*/
|
||||
|
||||
models.sequelize.sync().then(() => {
|
||||
server.listen(port, () => {
|
||||
debug("Express server listening on port " + server.address().port);
|
||||
});
|
||||
server.on("error", onError);
|
||||
server.on("listening", onListening);
|
||||
});
|
||||
|
||||
/**
|
||||
* Normalize a port into a number, string, or false.
|
||||
*/
|
||||
|
||||
function normalizePort(val) {
|
||||
let port = parseInt(val, 10);
|
||||
|
||||
if (isNaN(port)) {
|
||||
// named pipe
|
||||
return val;
|
||||
}
|
||||
|
||||
if (port >= 0) {
|
||||
// port number
|
||||
return port;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Event listener for HTTP server "error" event.
|
||||
*/
|
||||
|
||||
function onError(error) {
|
||||
if (error.syscall !== "listen") {
|
||||
throw error;
|
||||
}
|
||||
|
||||
let 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;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Event listener for HTTP server "listening" event.
|
||||
*/
|
||||
|
||||
function onListening() {
|
||||
let addr = server.address();
|
||||
let bind = typeof addr === "string"
|
||||
? "pipe " + addr
|
||||
: "port " + addr.port;
|
||||
debug("Listening on " + bind);
|
||||
}
|
10
config/config_exemple.json
Normal file
10
config/config_exemple.json
Normal file
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"database": {
|
||||
"username": "root",
|
||||
"password": null,
|
||||
"database": "database_test",
|
||||
"host": "127.0.0.1",
|
||||
"dialect": "postgres",
|
||||
"operatorsAliases": false
|
||||
}
|
||||
}
|
36
models/index.js
Normal file
36
models/index.js
Normal file
|
@ -0,0 +1,36 @@
|
|||
"use strict";
|
||||
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
const Sequelize = require("sequelize");
|
||||
const basename = path.basename(__filename);
|
||||
const config = require(__dirname + "/../config/config.json")["database"];
|
||||
const db = {};
|
||||
|
||||
let sequelize;
|
||||
if (config.use_env_variable) {
|
||||
sequelize = new Sequelize(process.env[config.use_env_variable], config);
|
||||
} else {
|
||||
sequelize = new Sequelize(config.database, config.username, config.password, config);
|
||||
}
|
||||
|
||||
fs
|
||||
.readdirSync(__dirname)
|
||||
.filter(file => {
|
||||
return (file.indexOf(".") !== 0) && (file !== basename) && (file.slice(-3) === ".js");
|
||||
})
|
||||
.forEach(file => {
|
||||
const model = sequelize["import"](path.join(__dirname, file));
|
||||
db[model.name] = model;
|
||||
});
|
||||
|
||||
Object.keys(db).forEach(modelName => {
|
||||
if (db[modelName].associate) {
|
||||
db[modelName].associate(db);
|
||||
}
|
||||
});
|
||||
|
||||
db.sequelize = sequelize;
|
||||
db.Sequelize = Sequelize;
|
||||
|
||||
module.exports = db;
|
3043
package-lock.json
generated
Normal file
3043
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load diff
21
package.json
Normal file
21
package.json
Normal file
|
@ -0,0 +1,21 @@
|
|||
{
|
||||
"name": "letu",
|
||||
"version": "0.0.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"start": "node ./bin/www"
|
||||
},
|
||||
"dependencies": {
|
||||
"cookie-parser": "~1.4.4",
|
||||
"debug": "~2.6.9",
|
||||
"express": "~4.16.1",
|
||||
"http-errors": "~1.6.3",
|
||||
"morgan": "~1.9.1",
|
||||
"node-sass-middleware": "0.11.0",
|
||||
"pg": "^8.2.1",
|
||||
"pug": "2.0.0-beta11",
|
||||
"sequelize": "^5.21.12",
|
||||
"sequelize-cli": "^5.5.1",
|
||||
"socket.io": "^2.3.0"
|
||||
}
|
||||
}
|
8
public/stylesheets/style.css
Normal file
8
public/stylesheets/style.css
Normal file
|
@ -0,0 +1,8 @@
|
|||
body {
|
||||
padding: 50px;
|
||||
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; }
|
||||
|
||||
a {
|
||||
color: #00B7FF; }
|
||||
|
||||
/*# sourceMappingURL=style.css.map */
|
9
public/stylesheets/style.css.map
Normal file
9
public/stylesheets/style.css.map
Normal file
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"version": 3,
|
||||
"file": "style.css",
|
||||
"sources": [
|
||||
"style.sass"
|
||||
],
|
||||
"names": [],
|
||||
"mappings": "AAAA,AAAA,IAAI,CAAC;EACH,OAAO,EAAE,IAAI;EACb,IAAI,EAAE,kDAAkD,GAAG;;AAE7D,AAAA,CAAC,CAAC;EACA,KAAK,EAAE,OAAO,GAAG"
|
||||
}
|
6
public/stylesheets/style.sass
Normal file
6
public/stylesheets/style.sass
Normal file
|
@ -0,0 +1,6 @@
|
|||
body
|
||||
padding: 50px
|
||||
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif
|
||||
|
||||
a
|
||||
color: #00B7FF
|
9
routes/index.js
Normal file
9
routes/index.js
Normal file
|
@ -0,0 +1,9 @@
|
|||
let express = require("express");
|
||||
let router = express.Router();
|
||||
|
||||
/* GET home page. */
|
||||
router.get("/", (req, res) => {
|
||||
res.render("index", { title: "L'ETU" });
|
||||
});
|
||||
|
||||
module.exports = router;
|
4
sockets/index.js
Normal file
4
sockets/index.js
Normal file
|
@ -0,0 +1,4 @@
|
|||
module.exports = socket => {
|
||||
console.log("New connection !");
|
||||
socket.emit("connected");
|
||||
}
|
6
views/error.pug
Normal file
6
views/error.pug
Normal file
|
@ -0,0 +1,6 @@
|
|||
extends layout
|
||||
|
||||
block content
|
||||
h1= message
|
||||
h2= error.status
|
||||
pre #{error.stack}
|
5
views/index.pug
Normal file
5
views/index.pug
Normal file
|
@ -0,0 +1,5 @@
|
|||
extends layout
|
||||
|
||||
block content
|
||||
h1= title
|
||||
p Welcome to #{title}
|
7
views/layout.pug
Normal file
7
views/layout.pug
Normal file
|
@ -0,0 +1,7 @@
|
|||
doctype html
|
||||
html
|
||||
head
|
||||
title= title
|
||||
link(rel="stylesheet", href="/stylesheets/style.css")
|
||||
body
|
||||
block content
|
Reference in a new issue