npm install express-handlebars
let express = require('express');
let exphbs = require('express-handlebars');
let app = express();
let hbs = exphbs.create({});
// Register `hbs.engine` with the Express app.
app.engine('handlebars', hbs.engine);
app.set('view engine', 'handlebars');
app.get("/", (req, res) => {
res.render("main", {layout: false, myName: "Amir"});
});
// in main.handlebars:
<h1>my name is {{myName}}</h1>
app.use(express.static(pathOfStaticFiles));
// in main.handlebars:
<head>
<link rel='stylesheet' href='/pathOfStaticFiles/css/style.css'>
</head>
app.use("/a_prefix", express.static(pathOfStaticFiles));
// in main.handlebars:
<head>
<link rel='stylesheet' href='a_prefix/pathOfStaticFiles/css/style.css'>
</head>
npm install module-alias
// in package.json:
"_moduleAliases": {
"@root": ".",
"@models": "app/models",
"@controllers": "app/controllers",
"@routes": "app/routes",
"@services": "app/services",
"@database": "./database"
},
in index file put this import:
require("module_alias/register");
using example:
const db = require("@database/fileName");
npm install jalali-moment
const jm = require("jalali-moment");
posts.forEach(post => {
post.persianCreatedAt = jm(post.created_at).locale("fa").format("YYYY/MM/DD");
});
npm install gravatar
const gravatar = require("gravatar");
gravatar.url(userEmail, options); --> img url
npm install bcrypt
const bcrypt = require("bcrypt");
exports.hashPassword = plainPassword => {
return bcrypt.hashSync(plainPassword, saltRound(a number));
};
exports.comparePassword = (plainPassword, hashedPassword) => {
return bcrypt.compareSync(plainPassword, hashedPassword);
};
npm install connect-flash
const flash = require("connect-flash);
const cookieParser = require("cookie-parser);
const session = require("express-session);
app.use(session({
secret: "Amir`s secret key",
saveUninitialized: true,
cookie: { maxAge: 3600000 },
resave: false
}));
app.use(flash());
app.use((req, res, next) => {
const errors = req.flash("errors");
const success = req.flash("success");
const hasError = Boolean(errors.length);
const hasSuccess = Boolean(success.length);
let user = null;
if (req.session.user) {
user = req.session.user;
user.avatarURL = gravatar(user.email);
}
res.adminRender = (template, options) => {
options = { ...options, layout: "admin", hasError, hasSuccess, errors, success, user };
res.render(template, options);
};
res.authRender = (template, options) => {
options = { ...options, hasError, hasSuccess, errors, success };
res.render(template, options);
};
next();
});
app.get("/", (req, res) => {
if (...) {
req.flash("success");
} else {
req.flash("success")
}
})
// default session store is memoryStore.
sudo service redis-server start
redis-cli --> 127.0.0.1:6379> --> 127.0.0.1: localhost, 6379: port of DB
install <> from microsoft store. in connection tab lick on new --> host: 127.0.0.1, port 6379, password:
npm install redis connect-redis
const RedisStore = require("connect-redis").default;
const { createClient } = require("redis");
// Initialize client.
let redisClient = createClient();
redisClient.connect().catch();
// Initialize store.
let redisStore = new RedisStore({
client: redisClient,
prefix: "myApp:",
});
app.use(session({
store: redisStore(),
secret: "kl3jkh34g5l5jh645rj5v2",
resave: false, // required: force lightweight session keep alive (touch)
saveUninitialized: false, // recommended: only save session when data exists
cookie: { maxAge: 60000 },
}));
npm install express-mysql-session
const session = require("express-session");
const mySQLstore = require("express-mysql-session)(session);
const mySQLOptions = {
host: process.env.MYSQL_HOST,
user: process.env.MYSQL_USER,
password: process.env.MYSQL_PASSWORD,
port: process.env.MYSQL_PORT,
database: process.env.MYSQL_DATABASE,
};
const sessionStore = new mySQLstore(mySQLOptions);
app.use(cookieParser())
app.use(session({
store: sessionStore,
secret: "kl3jkh34g5l5jh645rj5v2",
resave: true,
saveUninitialized: true,
cookie: { maxAge: 60000 },
}));
npm install lodash
const _ = require("lodash");
_.groupBy(comments, "parent");
npm install express-fileopload
const fileUpload = require("express-fileupload");
npm instal uuid
const {v4: uuidv4} = require("uuid");
const path = require("path");
const newFileExt = path.extname(req.files.thumbnail.name);
const newFileName = uuidv4() + newFileExt;
const fileNewPath = path.join(process.cwd(), "public", "upload", "thumbnails", newFileName);
req.files.thumbnail.mv(fileNewPath, (err => {
console.log(err);
}));
// npm install sharp
const sharp = require("sharp");
sharp(addressOfImg)
.resize(320, 240)
.rotate()
.png()
.toFile("output.webP", (err, result) => ...)