// ***************************************************** // // ***************************************************** const express = require('express'); // To build an application server or API const app = express(); const handlebars = require('express-handlebars'); const Handlebars = require('handlebars'); const path = require('path'); const pgp = require('pg-promise')(); // To connect to the Postgres DB from the node server const bodyParser = require('body-parser'); const session = require('express-session'); // To set the session object. To store or access session data, use the `req.session`, which is (generally) serialized as JSON by the store. const bcrypt = require('bcrypt'); // To hash passwords const axios = require('axios'); // To make HTTP requests from our server. We'll learn more about it in Part C. // ***************************************************** // // ***************************************************** // create `ExpressHandlebars` instance and configure the layouts and partials dir. const hbs = handlebars.create({ extname: 'hbs', layoutsDir: __dirname + '/views/layouts', partialsDir: __dirname + '/views/partials', }); // database configuration const dbConfig = { host: 'db', // the database server port: 5433, // the database port database: process.env.POSTGRES_DB, // the database name user: process.env.POSTGRES_USER, // the user account to connect with password: process.env.POSTGRES_PASSWORD, // the password of the user account }; const db = pgp(dbConfig); // test your database db.connect() .then(obj => { console.log('Database connection successful'); // you can view this message in the docker compose logs obj.done(); // success, release the connection; }) .catch(error => { console.log('ERROR:', error.message || error); }); // ***************************************************** // // ***************************************************** // Register `hbs` as our view engine using its bound `engine()` function. app.engine('hbs', hbs.engine); app.set('view engine', 'hbs'); app.set('views', path.join(__dirname, 'views')); app.use(bodyParser.json()); // specify the usage of JSON for parsing request body. // initialize session variables app.use( session({ secret: process.env.SESSION_SECRET, saveUninitialized: false, resave: false, }) ); app.use( bodyParser.urlencoded({ extended: true, }) ); // Serve static files from the 'public' directory app.use(express.static(path.join(__dirname, 'public'))); // ***************************************************** // // ***************************************************** // TODO - Include your API routes here // ***************************************************** // // ***************************************************** // starting the server and keeping the connection open to listen for more requests app.listen(3000); console.log('Server is listening on port 3000');