Pesapal junior-dev interview exercises
I chose the first exercise which is the http server I built it in nodejs Began with inbuilt modules then moved to expressjs to make hosting with https easier
It is currently hosted here
I also tried out the dictionary exercise as can be seen in ./websrapper/scrapper.js
It works well but needs improvement on data cleaning
How to run locally
Prerequisites
- node and npm installed
- install node modules(within the folder with package.json)
npm install
web server
node ./https-server/server.js
web scrapper
node ./web-scraper/scrapper.js
web server code
//import necessary express
const express = require("express");
//create an instance of express
const app = express();
//create port variable for easier config down the line
port = 8080;
//create a varible to store the response we will send
const requestListener = function (req, res) {
//http code signifying success
res.writeHead(200);
//actual response
res.end("Hello, World!");
};
//the endpoint that has been mapped
app.get("/", requestListener);
//setup server listenning port and initialise server at thta port
app.listen(process.env.PORT || port, () => {
console.log(`Example app listening on port ${process.env.PORT || port}`);
});
scrapper.js code
// import puppeteer
const puppeteer = require("puppeteer");
// create a logger for debugging
const logger = (stuff) => console.log(stuff);
// abstract away the website into a named variable
let website = "https://en.wikipedia.org/wiki/2022_Afghanistan_earthquake";
// function to get all text
let rawText;
const getAllText = async () => {
//create intance of puppeteer
const browser = await puppeteer.launch({
headless: true,
});
const page = (await browser.pages())[0];
await page.goto(website);
//extraction logic, might change a bunch of times
const extractedText = await page.$eval("*", (el) => el.innerText);
// format extracted text into a clean-ish array
const textArray = extractedText
.trim()
.toLowerCase()
// .replace("\n\n", "")
.replace("\n", " ")
.replace(/['"]+/g, "")
.split(` `);
return textArray;
//close the browser instance once done
await browser.close();
};
const wordArray = getAllText();
//wait for all promises to resolve so as to manipulate data
Promise.all([wordArray]).then((values) => {
// logger(
// "got here **********************************************************************"
// );
logger(values[0]);
const data = values[0];
// new set data
const counts = {};
for (const word of data) {
counts[word] = counts[word] ? counts[word] + 1 : 1;
}
logger(counts);
});