Split index file into src/ folder components

This commit is contained in:
2022-10-14 20:23:13 +02:00
parent 497037ad20
commit 9e9624821e
8 changed files with 111 additions and 78 deletions

View File

@@ -1,78 +0,0 @@
const figlet = require("figlet");
const express = require("express");
const app = express();
const port = 3000;
const defaultFontOptions = {
font: "Larry 3D",
horizontalLayout: "default",
verticalLayout: "default",
width: 80,
whitespaceBreak: true,
};
function generateLarryMessage(message) {
return new Promise((resolve, reject) => {
figlet.text(
message,
{
...defaultFontOptions,
},
(err, data) => {
if (err) {
console.error("error from figlet:", error);
return reject(err);
}
resolve(data.replaceAll("L", "_"));
}
);
});
}
function generateCatOutput(ascii) {
return `#!/bin/bash
cat << 'EOF'
${ascii}
EOF
`;
}
const asciiFontController = (req, res) => {
const { message } = req.query;
console.log(`generating ascii for: ${message}`);
return generateLarryMessage(message)
.then((ascii) => res.send(ascii))
.catch((error) =>
res.status(500).send({
success: false,
message: "Unexpected error from font generation",
})
);
};
const modtFontController = (req, res) => {
const { message } = req.query;
console.log(`generating motd for: ${message}`);
return generateLarryMessage(message)
.then((ascii) => generateCatOutput(ascii))
.then((motd) => res.send(motd))
.catch((error) => {
return res.status(500).send({
success: false,
message: "Unexpected error from font generation",
});
});
};
app.get("/ascii", asciiFontController);
app.get("/motd", modtFontController);
app.listen(port, () => {
console.log(`Font generation application listening on port ${port}.`);
});

View File

@@ -1,4 +1,7 @@
{ {
"scripts": {
"start": "node src/app.js"
},
"dependencies": { "dependencies": {
"express": "^4.18.2", "express": "^4.18.2",
"figlet": "^1.5.2" "figlet": "^1.5.2"

15
src/app.js Normal file
View File

@@ -0,0 +1,15 @@
const express = require("express");
const asciiFontController = require("./controllers/asciiController.js");
const modtFontController = require("./controllers/motdController.js");
const requiredQueryMiddleware = require("./requiredQueryMiddleware");
const app = express();
const port = 3000;
app.get("/ascii", requiredQueryMiddleware, asciiFontController);
app.get("/motd", requiredQueryMiddleware, modtFontController);
app.listen(port, () => {
console.log(`Font generation application listening on port ${port}.`);
});

33
src/ascii.js Normal file
View File

@@ -0,0 +1,33 @@
const figlet = require("figlet");
const defaultFontOptions = {
font: "Larry 3D",
horizontalLayout: "default",
verticalLayout: "default",
width: 80,
whitespaceBreak: true,
};
function generateAscii(message, options) {
const _options = {
...defaultFontOptions,
...options,
};
return new Promise((resolve, reject) => {
figlet.text(message, _options, (err, data) => {
if (err) {
console.error("error from figlet:", error);
return reject(err);
}
if (_options.font === "Larry 3D") {
data = data.replaceAll("L", "_");
}
resolve(data);
});
});
}
module.exports = generateAscii;

View File

@@ -0,0 +1,16 @@
const generateAscii = require("../ascii.js");
const asciiFontController = (req, res) => {
const { text } = req.query;
return generateAscii(text)
.then((ascii) => res.send(ascii))
.catch((error) =>
res.status(error?.statusCode || 500).send({
success: false,
message: error?.message || "Unexpected error from font generation",
})
);
};
module.exports = asciiFontController;

View File

@@ -0,0 +1,17 @@
const generateAscii = require("../ascii.js");
const modtFontController = (req, res) => {
const { text } = req.query;
return generateAscii(message)
.then((ascii) => generateCatOutput(ascii))
.then((motd) => res.send(motd))
.catch((error) => {
return res.status(500).send({
success: false,
message: "Unexpected error from font generation",
});
});
};
module.exports = modtFontController;

13
src/errors.js Normal file
View File

@@ -0,0 +1,13 @@
class MissingTextError extends Error {
constructor(error = null) {
const message = `Missing query parameter 'text'`;
super(message);
this.error = error;
this.statusCode = 400;
}
}
module.exports = {
MissingTextError,
};

View File

@@ -0,0 +1,14 @@
const { MissingTextError } = require("./errors.js");
const requiredQueryMiddleware = (req, res, next) => {
const { text } = req.query;
if (!text || text?.length === 0) {
const error = new MissingTextError();
return res.status(error?.statusCode || 500).send(error?.message);
}
next();
};
module.exports = requiredQueryMiddleware;