Installation
npm init --y
npm i express pg sequelize body-parser passport passport-local
npm i dotenv bcrypt express-session express-handlebars
npm i --save-dev nodemon
Et le script start
dans package.json
:
nodemon server.js
Structure du projet
Le projet suivra la structure suivante :
.
├── package.json
├── .env
├── config/
│ └── config.json
│ └── passport/
│ └── passport.js
├── controllers
├── routes
├── models/
│ ├── index.js
│ └── users.js
└── views
Configuration
Contenu du fichier config.json
:
{
"development": {
"username": "josephazar",
"password": null,
"database": "bd_passportlocal",
"host": "localhost",
"port": 5432,
"dialect": "postgres"
},
"test": {},
"production": {}
}
Contenu du fichier .env
:
NODE_ENV = "development"
SECRET = "abcd"
API
Fichier ‘server.js’
const express = require("express");
const app = express();
const passport = require("passport");
const session = require("express-session");
const bodyParser = require("body-parser");
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
const dotenv = require("dotenv");
dotenv.config();
console.log(process.env.SECRET);
// Handlebars
const exphbs = require("express-handlebars");
app.set("views", "./views");
app.set("view-engine", ".hbs");
app.engine("hbs", exphbs.engine({ extname: ".hbs" }));
// Models
const models = require("./models");
models.sequelize.sync().then(
() => {
console.log("BDD fonctionne bien");
},
console.err
)
app.listen(
3000,
() => {
console.log("Serveur écoute sur port 3000");
}
)
Modèles Sequelize
Fichier models/users.js :
const {DataTypes} = require("sequelize");
module.exports = function(sequelize){
const User = sequelize.define('user', {
id: {
autoincrement: true,
primaryKey; truen,
type: DataTypes.INTEGER,
allowNull: false
},
firstName: {type: DataTypes.STRING, notEmpty: true},
lastName: {type: DataTypes.STRING, notEmpty: true},
emailId: {
type: DataTypes.STRING,
notEmpty: true,
validate: {isEmail: true}
},
password: {type:DataTypes.STRING, allowNul: false}
},
tableName: 'users'
);
}
Fichier models/index.js :
const fs = require("fs");
const path = require("path");
const Sequelize = require("sequelize");
const env = process.env.NODE_ENV || 'development';
const config = require(
path.join(__dirname, '..', 'config', 'config.json')
)[env];
const sequelize = new Sequelize(
config.database,
config.username,
config.password,
config
)
const db = {};
fs.readdirSync(__dirname)
.filter((f) => !f.startsWith('.') && f !== 'index.js')
.forEach(function(f){
let model = require(path.join(__dirname, f))(sequelize);
db[model.name] = model;
})
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;
passport.js
const bcrypt = require("bcrypt");
module.exports = function(passport, user) {
passport.serializeUser(function(user, done){
done(null, user, id);
})
}