From b3a277339374b218a2b51b9a19c8203978a417c4 Mon Sep 17 00:00:00 2001 From: GramingFoxTeam Date: Fri, 18 Nov 2022 15:55:17 +0300 Subject: [PATCH] refactor(server): don't use global variables --- server/events/addTrainData.js | 11 ++++------- server/events/ai.js | 18 +++++++++--------- server/events/ocr.js | 27 +++++++++++++-------------- server/events/trainAI.js | 15 ++++++--------- server/index.js | 20 ++++++++------------ 5 files changed, 40 insertions(+), 51 deletions(-) diff --git a/server/events/addTrainData.js b/server/events/addTrainData.js index f530e7c..f7c6f5e 100644 --- a/server/events/addTrainData.js +++ b/server/events/addTrainData.js @@ -1,25 +1,22 @@ import { readFileSync, writeFileSync } from 'node:fs'; import { join } from 'node:path'; -export default function addTrainData(eventData) { +export default function addTrainData(eventData, __dirname, config) { const file = readFileSync( - join(global.__dirname, global.config.fasttext.trainFile), + join(__dirname, config.fasttext.trainFile), 'utf-8' ); const { label, text } = eventData; if (file.includes(text)) return; - + const data = file.split('\n'); const labelIndex = data.findIndex((data) => data.startsWith(label)); data.splice(labelIndex === -1 ? 0 : labelIndex, 0, `${label} ${text}`); - writeFileSync( - join(global.__dirname, global.config.fasttext.trainFile), - data.join('\n') - ); + writeFileSync(join(__dirname, config.fasttext.trainFile), data.join('\n')); return; } diff --git a/server/events/ai.js b/server/events/ai.js index ffd5398..671dff5 100644 --- a/server/events/ai.js +++ b/server/events/ai.js @@ -1,15 +1,15 @@ import { serialize } from 'bson'; -export default async function runAI(client, data) { - const predictions = await global.ft.predict(data.text); - const jsonData = { - op: 2, - id: data.id, - predictions - }; +export default async function runAI(client, data, ft) { + const predictions = await ft.predict(data.text); - const bsonData = serialize(jsonData); - client.write(bsonData); + client.write( + serialize({ + op: 2, + id: data.id, + predictions + }) + ); return; } diff --git a/server/events/ocr.js b/server/events/ocr.js index d196cc8..78766b6 100644 --- a/server/events/ocr.js +++ b/server/events/ocr.js @@ -1,23 +1,22 @@ import { recognize } from 'node-tesseract-ocr'; import { serialize } from 'bson'; -export default async function runOCR(client, eventData) { - const config = { - lang: 'eng', - oem: 3, - psm: 3 - }; +const config = { + lang: 'eng', + oem: 3, + psm: 3 +}; +export default async function runOCR(client, eventData) { const ocrText = await recognize(eventData.url, config); - const jsonData = { - op: 6, - id: eventData.id, - ocrText - }; - - const bsonData = serialize(jsonData); - client.write(bsonData); + client.write( + serialize({ + op: 6, + id: eventData.id, + ocrText + }) + ); return; } diff --git a/server/events/trainAI.js b/server/events/trainAI.js index 5971119..05e23e4 100644 --- a/server/events/trainAI.js +++ b/server/events/trainAI.js @@ -1,7 +1,7 @@ import FastText from 'fasttext.js'; import { join } from 'node:path'; -export default async function trainAI() { +export default async function trainAI(ftext, __dirname, config) { const ft = new FastText({ train: { // number of concurrent threads @@ -39,19 +39,16 @@ export default async function trainAI() { // load pre trained word vectors from unsupervised model pretrainedVectors: '' }, - serializeTo: join( - global.__dirname, - global.config.fasttext.loadModel - ).replace('.bin', ''), - trainFile: join(global.__dirname, global.config.fasttext.trainFile), - bin: join(global.__dirname, global.config.fasttext.bin) + serializeTo: join(__dirname, config.fasttext.loadModel).replace('.bin', ''), + trainFile: join(__dirname, config.fasttext.trainFile), + bin: join(__dirname, config.fasttext.bin) }); - global.ft.unload(); + ftext.unload(); await ft.train(); - global.ft.load(); + ftext.load(); return; } diff --git a/server/index.js b/server/index.js index eeaf7f5..a50ff93 100644 --- a/server/index.js +++ b/server/index.js @@ -4,23 +4,19 @@ import { fileURLToPath } from 'node:url'; import { dirname } from 'node:path'; const __filename = fileURLToPath(import.meta.url); -global.__dirname = dirname(__filename); +const __dirname = dirname(__filename); + +const config = JSON.parse(readFileSync('./config.json', 'utf-8')); -const configJSON = readFileSync('./config.json', 'utf-8'); -const config = JSON.parse(configJSON); -global.config = config; import { createServer } from 'node:net'; import { deserialize } from 'bson'; import FastText from 'fasttext.js'; import { runAI, trainAI, runOCR, addTrainData } from './events/index.js'; -const ft = new FastText(global.config.fasttext); +const ft = new FastText(config.fasttext); ft.load(); -// I'm sorry. This is probably the only solution. -global.ft = ft; - const server = createServer(async (client) => { client.on('data', async (data) => { const eventData = deserialize(data, { @@ -29,17 +25,17 @@ const server = createServer(async (client) => { switch (eventData.op) { case 1: { - runAI(client, eventData); + runAI(client, eventData, ft); break; } case 3: { - addTrainData(eventData); + addTrainData(eventData, __dirname, config); break; } case 4: { - trainAI(); + trainAI(ft, __dirname, config); break; } @@ -51,4 +47,4 @@ const server = createServer(async (client) => { }); }); -server.listen(global.config.server.port || 3000); +server.listen(config.server.port || 3000);