עזרה בתחילת העבודה עם הספריה לnodejs למתחיל
-
-
@צדיק-תמים עברתי, ולא ממש הבנתי את הדוגמה עצמה, היא יותר מידי עמוסה ומורכבת
האם אפשר לטעון את הדוגמה עצמה כך
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, היית צריך את המידלוור הזה.