@chagold או בקיצור
alert = console.error
@chagold או בקיצור
alert = console.error
אולי תדרוס את הפונקציה אלרט
alert = null
@Nanif צריך מונגו קליינט לא מונגו DB, וכבר יש לך מונגו קליינט.
נראה שהרבה התלוננו על השגיאה שקיבלת, יש על זה בגיטהאב הרבה תלונות
https://github.com/metabase/metabase/issues/6678
https://github.com/metabase/metabase/issues/9867
נסה את הפתרונות שם.
if err != nil {
}
אם בהשמה תכתוב כך:
resp, _ := http.DefaultClient.Do(req)
במקום לכתוב err כותבים קו תחתון וזה פוטר אותך מלהשתמש במשתנה הזה.
time.Sleep(10 * time.Second)
ותבדוק אם זה משנה את התמונה
לגופה של שאלה, לא התעמקתי לגמרי בקוד שלך, אבל זה נשמע לי הגיוני לגמרי שקריאה שניה מגיעה לפני קריאה ראשונה, זה תלוי בהרבה פרמטרים, המשתנה של הזמן לא מעיד על שום דבר כי שני המשתנים מאותחלים כמעט במקביל כי שתי הפונקציות נקראות אחת אחרי השניה ברצף וזה מאותחל מיד עם אתחול הפונקציה
@chagold אם אני לא טועה sessionStorage שומר לפי הטאב הנוכחי, אם אני טועה, אז אתה יכול לעשות פרמטר ב URL ששומר את הסשן הנוכחי בטאב הנוכחי, ותוכל דרך הקוד לקבל את הפרמטר הזה
עריכה:
לפי מה שכתוב כאן:
https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage
טאב חדש זה סשן חדש, אז לכאורה זה ממש מה שאתה מחפש
@nigun בנוד אפשר לעשות את זה מסודר עם אירועים, תודיע אם זה רלוונטי להוסיף פרטים
בכלל דומיין זה לא דבר חסוי, זה רשום בשרתי DNS ציבוריים וכל הרוצה מקבל מידע, אפשר לקבל בקלות את הרשימה של הדומיינים שמפנים לשרת שלך, אז אי אפשר לאבטח מידע בצורה הזו (אא"כ אתה מדבר על רשת אירגונית פנימית עם שרת DNS עצמאי...)
מסכים עם @avr416 בקשר ליתרונות של אנגולר 2 וטייפסקריפט, אבל העוצמה של אנגולר 2 היא גם חסרון, אם אני צריך דף פשוט עם כמה בינדינגים וכמה ngFor זה ממש בל תשחית לרתום את המרכבה של אנגולר 2 בשביל זה, חוץ מהמורכבות של הסביבת פיתוח, כל טעינת דף באנגולר 2 דורשת טעינת סקריפט כבד ואיתחול של מאות מחלקות, וזה יכול לקחת כמה שניות שאין להם הצדקה, לעומת זה באנגולר 1 זה פשוט לשים תגית סקריפט וכמה שורות קוד בודדות, אפשר אפילו בפידל לעשות אנגולר 1, בשביל דוגמת קוד נורמלית באנגולר 2 צריך לטעון plnkr או stackblitz כבדים. אז כדי להצדיק שימוש באנגולר 2 צריך שזה יהיה אפליקציה ממש מורכבת, אז אתה נהנה מהסדר והשכלול של אנגולר 2. כנלע"ד
ואגב, מטריאל עובד מצוין גם באנגולר 1, יותר פשוט ואם אני לא טועה יש לו יותר מרכיבים מאנגולר 2
@חוקר אמר בתתי הפניות ב express:
@אהרן אמר בתתי הפניות ב express:
כי אתה לא רוצה לסיים את ההתקשרות אם המערכת פתוחה.
אכן
התכוונתי לשאול בעיקר החלק השני, שלכאורה החלק שלelse next()
מיותר
כשאתה קורא ל res.end()
אתה לא עוצר את הריצה של הפונקציה, אתה מסיים את התקשורת עם הקליינט, הפונקציה עצמה ממשיכה לרוץ, זה שני דברים שונים.
תנסה לדוגמא כך:
res.end();
console.log("res is ended");
ותראה את ההדפסה בקונסול, אפשר לא רק להדפיס אלא לעשות כל דבר אחר, להתחבר למסד נתונים או למערכת קבצים או כל מה שתרצה, רק לא לשלוח עוד מידע לקליינט, לדוגמא אם תנסה כך:
res.end()
res.write("hello")
תקבל שגיאה שהתקשורת כבר נסגרה ואז הפונקציה תכשל בגלל השגיאה.
אז אם לא תשים את זה בתוך else מה שיקרה שהפונקציה תמשיך ותקרא לשאר הנתיבים גם אם התקשורת כבר נסגרה, וזה יפלוט שגיאה.
@מנצפך אמר בauthentication ב - express:
לפרספורט אין מערכת סשנים עצמית, הוא צריך מערכת שדואגת לשמור את הסשנים, ובשלב האימות צריך לשלוף את מזהה הסשן, אתה צריך גם express-session וגם passport
@חוקר זה לא קשור לאיך נוד קורא את הדף, זה פשוט משתנה שמעולם לא אותחל אז הוא undefind, אתה יכול לכתוב כך:
var total = (campaign_stats && campaign_stats.data.total);
זה יבדוק אם המשתנה קיים ואם לא הוא יחזיר מיד את הundifind ולא יכשיל את הפונקציה
@חוקר אמר בשאלות של מתחיל - מקצועי ב nodejs:
@יוסף-בן-שמעון
תודה.
השאלה היא האם שייך כן לארוז את זה כפונקציה, כי אני רוצה לקבל json ולטפל אותו לנתח נתונים לתוך משתנים ועוד.
אני צריך אפשרות לקבל בסגנון שכתבתי בהתחלה.
יש מצב?
תודה
אתה יכול במקום לכתוב
res.text()
להחליף ל
res.json()
ואז בפונקציה השניה אתה מקבל את הbody כ JSON
אגב יש מודול יותר פופולרי לבקשות משרתים מרוחקים, קוראים לו request, אתה יכול להתקין כך
npm i request
ולהשתמש כך:
var request = require('request');
app.get('/page', (req, res)=>{
request('https://github.com/', (err, response, body)=>{
body = JSON.parse(body);
if(body.status == "ok") res.send("ok")
else res.send("no")
})
})
@חוקר אמר בשאלות של מתחיל - מקצועי ב nodejs:
נוד היא סינכרונית, כלומר כשאתה שולח בקשה לשרת מרוחק המעבד ממתין לתשובה, בנתיים הקומפיילר לא מחכה אלא ממשיך לשורה הבאה, ועד שהתשובה מגיעה הוא כבר אוחז כמה שורות אח"כ ולכן הוא לא טוען את התשובה למשתנה.
הפתרון היא לעבוד עם callback או עם promise, לדוגמא במודול שאתה משתמש יש פרומיס מובנה, תראה כאן:
https://www.npmjs.com/package/node-fetch#plain-text-or-html
fetch('https://github.com/')
.then(res => res.text())
.then(body => console.log(body));
then הראשון ממיר את התשובה מאובייקט לטקסט, ומחזיר אותו ל then השני, ובשני אתה יכול לשלוח את התשובה לאיפה שאתה רוצה. משהו כזה:
app.get('/page', (req, res)=>{
fetch('https://github.com/')
.then(response => response.text())
.then(body =>{
if (body = "ok"){
res.end(body);
} else{
res.end("no");
}
});
})```
הוספה קטנה לשאלה ג'
א. הדרך המקובלת היא כמו שאמר דוד, לכתוב את הפונקציה בקובץ כך:
//child-script.js
function globalFunc(){
console.log("A")
}
module.exports = globalFunc;
ולייבא אותו כך
//main-script.js
var globalFunc = require('./child-script.js')
globalFunc()
אפשר גם ליצור משתנים גלובליים ממש, אם אתה מאתחל את המשתנה בלי להצהיר עליו עם var או let או function וכדומה, לדוגמא:
globalFunc = function(){
console.log("A")
}
globalVar = "globalVar"
ואז אתה עושה ממש כמו include בקובץ הראשי או בכל קובץ שהוא ממרחבי האפליקציה:
require('./child-script.js')
globalFunc()
console.log(globalVar )
והמשתנים האלה זמינים לך בכל האפליקציה.
אבל זכור לי שלא ממליצים לעבוד כך, כי זה יכול לגרום התנגשות בין משתנים בלי שימת לב, וגם אם אתה עובד עם IDE נורמלי כמו vscode הוא לא יודע לזהות את המשתנים ולא יתן לך הצעות להשלמה אוטומטית.
Sequlize זה סה"כ ממשק שממיר קוד לשאילתת SQL, הוא לא מחזיק שום דבר בזיכרון
@chagold כתב בהמרת נתונים (php) כדי להכניס לpostgreSql:
אבל האמת, אני צריך לעבור קורס בנושא הזרקות.
לא חייב, זה יכול לתרום אבל זה לא הכרחי, מה שחשוב זה להקפיד לא לסמוך על המשתמש בשום דבר, לא לקבל ממנו שום קלט בלי לטהר אותו לפני כן, אם אתה בונה שאילתה אל תשרשר את הקלט לתוך השאילתה, אלא תשתמש בכלים של טיהור וחיטוי
@hp079 ניסחת את השאלה כאחד שנמצא במעמקי הסיטואציה, כדי שגם אחרים יוכלו להבין את השאלה, כדאי שתפרט מה מבנה הנתונים של variableData, מה זה data, מה אתה מנסה לעשות בדיוק, מה אתה מצליח ומה אתה נכשל
@chagold נראה לי שאתה צריך להוסיף גם אישור להידרים
res.header('Access-Control-Allow-Headers', '*');
@ממ אני מציע שתעשו פרוייקט נקי כאן https://stackblitz.com/
ותנסו לשחזר את הבעיה, כדי שיהיה אפשר להבין מה הבעיה בדיוק