עזרה בתחילת העבודה עם הספריה לnodejs למתחיל
-
יש את הספריה שפרסם @צדיק-תמים כאן https://github.com/ShlomoCode/yemot-router2/tree/master
ואני מנסה להבין כיצד אני צריך להשתמש בה, אני מתחיל בnode.
יש לי בשרת (אובנטו) את הקובץ הבא, שמשמיע לי בטלפון "שלום עולמי, בית חלומי",
const express = require('express'); const app = express(); const port = 3101; app.listen(port, function () { console.log(`Server is listening on port ${port}`); }); app.get('/test', function (req, res) { res.send('id_list_message=t-שלום עולמי.t-בית חלומי &'); });
כעת אני רוצה להשמיע למשתמש טקסט תפריט, היינו "לשלום עולמי הקש 1 לבית חלומי הקש 2" ואז לקבל את ההקשה שלו ולרשום אותה אצלי, ולשלוח למאזין תגובה של "הבחירה נרשמה בהצלחה, תודה"
כיצד אני עושה דבר כזה עם הספרייה הנ"ל?
תודה לכל המסייעים!
-
-
@צדיק-תמים עברתי, ולא ממש הבנתי את הדוגמה עצמה, היא יותר מידי עמוסה ומורכבת
האם אפשר לטעון את הדוגמה עצמה כך
nodejs exmple.js
?
א"כ, אילו מודולים צריך להתקין?
-
@מוטי-מן הנה דוגמה יותר מופשטת:
import { YemotRouter } from 'yemot-router2'; import express from 'express'; export const app = express(); export const router = YemotRouter({ printLog: true }); /** @param {import('yemot-router2').Call} call */ async function callHandler (call) { const choice = await call.read([{ type: 'text', data: 'לשלום עולמי הקש 1 לבית חלומי הקש 2' }], 'tap', { max_digits: 1, digits_allowed: [1, 2] }); console.log('choice', choice); return call.id_list_message([{ type: 'text', data: 'שלום ותודה' }]); } router.get('/', callHandler); app.use(router); const port = 3000; app.listen(port, () => console.log(`example yemot-router2 running on port ${port}`));
כדי להריץ אותה יש להתקין קודם את התלות:
npm install express yemot-router2
-
@מוטי-מן כתב בעזרה בתחילת העבודה עם הספריה לnodejs למתחיל:
@צדיק-תמים עברתי, ולא ממש הבנתי את הדוגמה עצמה, היא יותר מידי עמוסה ומורכבת
האם אפשר לטעון את הדוגמה עצמה כך
nodejs exmple.js
?
א"כ, אילו מודולים צריך להתקין?
כדי להריץ את הדוגמה ששם תוריד את כל הrepo למחשב, תריץ
npm install
ואזnpm run example
(שזה בעצםnode --watch example.js
) -
@צדיק-תמים כיצד ניתן לעבוד עם
api_url_post=yes
?אני מקבל את השגיאה
Error: YemotRouter: it look you use api_url_post=yes, but you didn't include express.urlencoded({ extended: true }) middleware! (https://expressjs.com/en/4x/api.html#express.urlencoded) at file:///var/www/node/node_modules/yemot-router2/lib/yemot_router.js:122:35 at Layer.handle [as handle_request] (/var/www/node/node_modules/express/lib/router/layer.js:95:5) at next (/var/www/node/node_modules/express/lib/router/route.js:144:13) at Route.dispatch (/var/www/node/node_modules/express/lib/router/route.js:114:3) at Layer.handle [as handle_request] (/var/www/node/node_modules/express/lib/router/layer.js:95:5) at /var/www/node/node_modules/express/lib/router/index.js:284:15 at Function.process_params (/var/www/node/node_modules/express/lib/router/index.js:346:12) at next (/var/www/node/node_modules/express/lib/router/index.js:280:10) at Function.handle (/var/www/node/node_modules/express/lib/router/index.js:175:3) at router (/var/www/node/node_modules/express/lib/router/index.js:47:12)
-
@מוטי-מן כתוב לך בדיוק מה הבעיה
@מוטי-מן כתב בעזרה בתחילת העבודה עם הספריה לnodejs למתחיל:
Error: YemotRouter: it look you use api_url_post=yes, but you didn't include express.urlencoded({ extended: true }) middleware! (https://expressjs.com/en/4x/api.html#express.urlencoded)
-
@צדיק-תמים כן אבל זה לא ממש מובן, לפחות לאנשים כמוני
ובדרך אגב, יש דרך לשמור את הלוגים שהספריה מדפיסה לקובץ כלשהו בשרת?
-
@מוטי-מן אתה צריך להוסיף:
app.use(express.urlencoded({ extended: true }));
ממליץ לך שאחרי שהצלחת להקים hellow world תעבור על הדוגמה המלאה.
@מוטי-מן כתב בעזרה בתחילת העבודה עם הספריה לnodejs למתחיל:
ובדרך אגב, יש דרך לשמור את הלוגים שהספריה מדפיסה לקובץ כלשהו בשרת?
הספריה משתמשת ב
console.log
, אתה יכול להפנות את הפלט של התהליך לקובץ טקסט:node app.js >> log.txt
כדי להחליף כל פעם את הקובץ במקום להוסיף, תשתמש ב
>
אחד.עבור השרת אני ממליץ להשתמש בpm2 (https://tchumim.com/topic/2190/pm2-כלי-לניהול-והרצת-אפליקציות-טרמינל), כלי נוח מאוד שגם מאפשר לשמור את הלוגים עם תאריך ושעה אוטומטי, הפעלה אוטומטית של האפליקציות אחרי הפעלה מחדש, ועוד המון דברים.
-
@צדיק-תמים ניסיתי את זה כבר, ככה
router.get('/', call); router.post('/', call); app.use(router); app.use(express.urlencoded({ extended: true }));
או ככה
router.get('/', call); router.post('/', call); app.use(router, express.urlencoded({ extended: true }));
ועדיין מחזיר לי את השגיאה הנ"ל בעת קריאה בpost
-
@מוטי-מן השורה שהוספת צריכה להיות לפני ה
app.use(router)
, כמו כל middlewareapp.use(express.urlencoded({ extended: true })); router.get('/', call); router.post('/', call); app.use(router);
אגב זה לא משהו של הספריה שלי, גם אם היית בונה שרת HTTP באקספרס פשוט ושולח אליו בצורה שימות שולחים בpost, היית צריך את המידלוור הזה.