עזרה בחלוקת קובץ node js למספר קבצים נפרדים
-
שלום, יש לי קובץ node js שמכיל מספר פונקציות, ואני רוצה לפצל כל פונקציה (היינו כל פעילות מסויימת) לקובץ נפרד בשביל שיהיה מסודר, וכן להעביר את הראוטרים לקובץ אחד, שממנו יופעלו כל הקבצים,
חלק מהפונקציות נקראות באמצעות הדפדפן, וחלק מימות המשיח עם הספריה, והסתבכתי בענין.
אני מצרף קטע עם דוגמה בכדי שיהיה קל להבין למה אני מתכוון,
הראוטרים של chk וShare הם מודולי API של ימות שמשתמשים בספרייה, והראוטר הכללי וYemotLogin משמשים לגישה דרך הדפדפן.
בנוסף, אני רוצה להיות מסוגל לקרוא לפונקציה שנקראת licenseVerification מכל הקבצים ללא שאצטרך להעתיק אותה לכל אחד.
אשמח לעזרה והסבר מה אני צריך להשאיר בקובץ הראשי של הראוטרים, ומה אני צריך לכלול בכל קובץ שמשתמש בספרייה לימות המשיח, ומה בפונקציות הרגילות.
import { YemotRouter } from 'yemot-router2'; import express from 'express'; import axios from 'axios'; import fs from 'fs'; import { promises as fsPromises } from 'fs'; export const app = express(); export const router = YemotRouter({ printLog: true, uncaughtErrorHandler: (error, call) => { console.log(`Uncaught error from ${call.phone}. error stack: ${error.stack}`); return call.id_list_message([{ type: 'text', data: 'השרת נתקל בשגיאה פנה למנהל' }]); } }); router.post('/chk', callHandler); router.post('/Share', sharing); app.get('/YemotLogin', (req, res) => yemotLogin(req, res)); app.get('/', function (req, res) { res.send('אין גישה'); }); app.use(express.urlencoded({ extended: true })); app.use(router); const port = 3000; app.listen(port, () => console.log(`The express server is now running and listening on port ${port}`)); const url_yemot_api = 'https://www.call2all.co.il/ym/api/'; async function yemotLogin(req, res) { console.log('yemotLogin'); res.send('Blocked'); } function licenseVerification(apiDID) { if (apiDID) { console.log('status: ', 'true'); return true; } else { console.log('status: ', 'blocked'); return false; } } async function sharing(call) { await call.id_list_message([{ type: 'text', data: 'הפעולה הושלמה' }]); } async function callHandler(call) { if (await licenseVerification(call.ApiDID) === true) { return call.id_list_message([{ type: 'text', data: 'גישה מאופשרת' }]); } else { return call.id_list_message([{ type: 'text', data: 'המספר שלכם חסום לגישה' }]); } }
-
@מוטי-מן קודם כל אני ממליץ לך בחום ומנסיון כשהייתי בשלב שלך בזמנו, לעבור על סדרת הסרטונים הזאת, נראה לי שזה יכסה לך דברים בסיסיים (לדוגמה את השאלה הנוכחית).
אני ממליץ על מבנה כזה:
app.js
תקיית src:
utils.js
תקיית api בתוך src:
router.js
controller.js
תקיית ivr בתוך src:
controller.js
router.jsכך קובץ utils.js ייצא את פונקציית הבדיקה:
export function licenseVerification(apiDID) { if (apiDID) { console.log('status: ', 'true'); return true; } else { console.log('status: ', 'blocked'); return false; } }
קובץ
controller.js
תחת ivr - מייצא פונקציות של הלוגיקת שיחה עצמה:import { licenseVerification } '../utils.js'; export async function sharing(call) { await call.id_list_message([{ type: 'text', data: 'הפעולה הושלמה' }]); } export async function callHandler(call) { if (await licenseVerification(call.ApiDID) === true) { return call.id_list_message([{ type: 'text', data: 'גישה מאופשרת' }]); } else { return call.id_list_message([{ type: 'text', data: 'המספר שלכם חסום לגישה' }]); } }
קובץ src/ivr/router.js:
import { YemotRouter } from 'yemot-router2'; import { callHandler } from './controller.js'; const router = YemotRouter({ printLog: true, uncaughtErrorHandler: (error, call) => { console.log(`Uncaught error from ${call.phone}. error stack: ${error.stack}`); return call.id_list_message([{ type: 'text', data: 'השרת נתקל בשגיאה פנה למנהל' }]); } }); router.get('/call', callHandler); export default router;
קובץ src/api/controller.js:
import { licenseVerification } '../utils.js'; export async function yemotLogin(req, res) { // licenseVerification(...) console.log('yemotLogin'); res.send('Blocked'); }
קובץ src/api/router.js:
import { Router } from 'express'; import { yemotLogin } from './controller.js'; const router = Router(); router.get('/page', yemotLogin); export default router;
קובץ
app.js
- אחראי רק על רמת השרת/אקספרס, ומייבא את הראוטרים ו"מפעיל" אותם באמצעות app.use:import express from 'express'; const app = express(); import ivrRouter from './src/ivr/router.js'; import apiRouter from './src/api/router.js'; app.use(express.urlencoded({ extended: true })); app.use(apiRouter); app.use('/ivr', ivrRouter); const port = 3000; app.listen(port, () => console.log(`The express server is now running and listening on port ${port}`));