Skip to content
Snippets Groups Projects
server.js 2.49 KiB
Newer Older
const browserSyncPort = 3000;
Alice Poggioli's avatar
Alice Poggioli committed
const distPath = "www";
const fs = require("fs");
const path = require("path");

// express server
Alice Poggioli's avatar
Alice Poggioli committed
const { join } = require("path");
const express = require("express");
const app = express();
Alice Poggioli's avatar
Alice Poggioli committed
let cookieParser = require("cookie-parser");
Alice Poggioli's avatar
Alice Poggioli committed
//By defaut the language should be english.
const default_lang = "en";
Alice Poggioli's avatar
Alice Poggioli committed
/**
 * Get the languages of the user's navigator and covert it in a array of exploitable datas.
Alice Poggioli's avatar
Alice Poggioli committed
 * @param {string} stringData
Alice Poggioli's avatar
Alice Poggioli committed
 */
function parseLanguageData(stringData) {
Alice Poggioli's avatar
Alice Poggioli committed
  var arrayData = stringData
    .split(",")
    .map(element => element.split(/[-;]/).shift());
  arrayData.push(default_lang);
  return arrayData;
Alice Poggioli's avatar
Alice Poggioli committed
/**
 * Get the language we can display.
 */
function getAvailableLanguage() {
Alice Poggioli's avatar
Alice Poggioli committed
  const langs = fs
    .readdirSync(distPath)
    .filter(f => path.basename(f, ".yml").match(/^index-[a-z]{2}\.html/))
    .map(f => f.match(/^index-([a-z]{2})\.html/)[1]);
  return langs;
Alice Poggioli's avatar
Alice Poggioli committed
/**
 * Compare the languages possibles with the languages avalaible and return the matched language.
Alice Poggioli's avatar
Alice Poggioli committed
 * @param {array} availableLanguages
 * @param {array} userLanguages
Alice Poggioli's avatar
Alice Poggioli committed
 */
function matchLanguage(availableLanguages, userLanguages) {
  for (let index = 0; index < userLanguages.length; index++) {
    const userLanguage = userLanguages[index];
    for (let index = 0; index < availableLanguages.length; index++) {
      const availableLanguage = availableLanguages[index];
      if (userLanguage === availableLanguage) {
Alice Poggioli's avatar
Alice Poggioli committed
        return userLanguage;
Alice Poggioli's avatar
Alice Poggioli committed
//JSON object to be added to language's cookie
let langAsked = {
  langIndice: null
};

Alice Poggioli's avatar
Alice Poggioli committed
  .use(cookieParser())
  .use(express.static(distPath))
  // .use('/src', express.static(join(__dirname, 'src')))
Alice Poggioli's avatar
Alice Poggioli committed

  //Route for adding lang's cookie
  //    res.cookie("langData", langAsked);

  .get(/^[^.]*$/, (req, rep) => {
Alice Poggioli's avatar
Alice Poggioli committed
    if (langAsked.langIndice == null) {
      var langRequired = matchLanguage(
        getAvailableLanguage(),
        parseLanguageData(req.headers["accept-language"])
      );
      langAsked = {
        langIndice: langRequired
      };
      rep.cookie("langData", langAsked);
      console.log("langAsked", langAsked)
    } else {
      var langRequired = langAsked.langIndice;
    }

    rep.sendFile(join(__dirname, distPath, `/index-${langRequired}.html`));
  })
  .listen(port);

// browser sync
Alice Poggioli's avatar
Alice Poggioli committed
const bs = require("browser-sync").create();
Alice Poggioli's avatar
Alice Poggioli committed
  files: [distPath + "/**/*"],
  proxy: `http://localhost:${port}`,
  open: false,
  notify: false,
  port: browserSyncPort
  // tunnel: true,
});