איך לקבל מידע מהשרת מידע האם ביצע מה שאמרתי לו

  • פותח הנושא tuty
  • פורסם בתאריך

tuty

משתמש פעיל
הנדסת תוכנה
אני עובדת עכשיו על פרויקט מסוים שבו יש לי שרת שכותבים בnode.js שמתחבר לmongo.db והצד לקוח כתוב בריאקט, יש לי בצד שרת פונקציה שמקבלת משתמש ומכניסה אותו לתוך הdb במונגו, הבעיה היא שאני רוצה שאם הוא לא הצליח להכניס את המשתמש אז שיחזיר לפונקציה שקראה לו מריאקט שהוא לא הצליח
איך אפשר לעשות את זה?
(אני ממש מקווה שהייתי מובנת אם לא אז אני אביא צילום של הקוד)
תודה רבה!!
 

java

משתמש סופר מקצוען
מנוי פרימיום
הנדסת תוכנה
יש חוקים מוסכמים לגבי סטטוס התשובה של השרת.
את תצטרכי להחזיר סטטוס שמתחיל ב3/4(/5), תלוי בסיבת הכישלון.
וסטטוס 200/201 במקרה של הצלחה, תלוי בפונקציונליות.
בreact את שולפת את הres.status ומטפלת בהתאם.

 

tuty

משתמש פעיל
הנדסת תוכנה
ממש תודה רבה!
אני רוצה שהוא יחזיר שגיאה מתי שהוא לא הכניס משתמש חדש לדטה בייס כי לא עמד בולידציות (כמו משתמש שלא הכניס את כל הפרטים הנדרשים) איזה סטטוס זה?
ואיפה אני עושה לו שיחזיר את הסטטוס?
 

tuty

משתמש פעיל
הנדסת תוכנה
באמת אני משתמשת בספריית expres זאת הפונקציה שלי, אני אמורה במקום return user לעשות return res.status?
ואז בריאקט לבדוק איזה סטטוס חזר לי?
ואם כן אז איזה סטטוס אומר שזה טוב ואיזה אומר שלא?
ממש תודה רבה!!
signUp = async(user)=>{
try {
var user=await userModel.insertMany([user])
return user;
} catch (error) {
return null;
}

};​
 

נחמד לעזור

משתמש מקצוען
עיצוב גרפי
עריכה תורנית
נראה שצרפתם את הפונקציה שאמורה לטפל בטופס אבל לא בראוטינג שמתעסק עם הקליינט.

באקספרס אתם כנראה משמשים בפונקציה שנראה בערך כך:
קוד:
app.get('/', (req, res) => {
///
    res.send("היי!")
})
נכון?

אז במקום לשלוח res.send שזה מיועד לתגובה רגילה, אתם יכולים להשתמש בres.status (אפשר לשרשר לזה גם json עם פרטים נוספים אודות השגיאה, אבל לא חשוב).

מספר השגיאה לא ממש משנה, אני חושב שקלט לא חוקי מהקליינט מקובל להחזיר את המספר 400
 

tuty

משתמש פעיל
הנדסת תוכנה
בפונקציה הזאת?
signUp = async(req, res) => {
const user=req.body;
const newUser =await dbAccessor.signUp(user);
res.send(newUser);
};​
אבל היא מקבלת את מה שמחזירה לה הפונקציה למעלה לא?
 

נחמד לעזור

משתמש מקצוען
עיצוב גרפי
עריכה תורנית
אני לא מכיר את הקוד שלכם, אבל אני מנסה לנחש באיזה צורה אתם עובדים לפי השורות שהעלתם קודם

יש לכם, כנראה, קובץ עם ראוטרים שמטפלים בקריאות של הלקוח, כולל הקריאה signUp
בשביל הסדר והנוחות עשיתם מה שמקובל, והראוטר לא מבצע את הרישום בעצמו, אלא קורא לפונקציית signUp מקובץ אחר, שהיא מבצעת את הרישום בפועל ומתקשרת עם מסד הנתונים.
הפונקצייה הזו שבקובץ השני שהעלתם אותה קודם (לא בתגובה האחרונה, שם קצת שיבשתם אותה, אלא תגובה אחת קודם) מחזירה user אם הרישום בוצע בהצלחה, או null אם הוא נכשל.
נדמה לי שמתאים ונח יותר שהיא תחזיר false במידה ונכשל.
לאחר מכן, את הראוטינג שמטפל בקריאה של הלקוח תכתבו בערך ככה (helpersUsers זה שם שהמצאתי לשם הקובץ שנתתם לקובץ עם פונקציות הטיפול ברישום מול מסד הנתונים):
קוד:
router.post("/signUp", async function (req, res) {
    const result = await helpersUsers.signUp(req.body);
    if (result){
        res.send("הרישום בוצע בהצלחה")
    }else{
        res.status(400).json({
            message: "רישום נכשל"
        })
    }
});

יש כמובן דרכים יותר טובות ויותר אלגנטיות.
כתבתי משהו שיראה מובן יותר.

בתקווה שעזרתי
 

tuty

משתמש פעיל
הנדסת תוכנה
בתקווה שעזרתי
עזר מאד מאד ממש תודה
רק אם אפשר עוד הבהרה קטנה:
בגלל שאני כן עושה את זה בקבצים נפרדים יש לי כמה שליחות לפונקציות ז"א שהראוטר מכיל את זה:
(usersRouter.post("/", usersController.signUp​
ואז הוא מנתב אותו לקונטרולר שזה הפונקציה הזאת:
}<=signUp = async(req, res)
const user=req.body;
const newUser =await dbAccessor.signUp(user);
res.send(newUser);
;{​
ואז הקונטרולר מנתב לפונקציה הזאת:
}<= signUp = async(user)
try {
var user=await userModel.insertMany(user)
return user;
} catch (error) {
{ return null;​

אז להחליף את הres.send שבקונטרולר (מודגש) לכל הקטע למעלה?
if (result){
res.send("הרישום בוצע בהצלחה")
}else{
res.status(400).json({
message: "רישום נכשל"
})
או להחליף בפונקציה האחרונה את הreturn?
סליחה ותודה רבה
 

אריאל87

משתמש מקצוען
הנדסת תוכנה
ממש תודה רבה!
אני רוצה שהוא יחזיר שגיאה מתי שהוא לא הכניס משתמש חדש לדטה בייס כי לא עמד בולידציות (כמו משתמש שלא הכניס את כל הפרטים הנדרשים) איזה סטטוס זה?
ואיפה אני עושה לו שיחזיר את הסטטוס?
בעיקרון אולי כדאי לתכנן את זה טוב יותר ולעשות את הולידציות בקליינט
יוזר שלא מילא את כל הפרטים הנדרשים אמור לקבל חיווי עוד לפני ששולח את הטופס, אין עניין לעשות קריאה לשרת ורק אז להחזיר שהפרטים לא תקינים.
 

tuty

משתמש פעיל
הנדסת תוכנה
בעיקרון אולי כדאי לתכנן את זה טוב יותר ולעשות את הולידציות בקליינט
יוזר שלא מילא את כל הפרטים הנדרשים אמור לקבל חיווי עוד לפני ששולח את הטופס, אין עניין לעשות קריאה לשרת ורק אז להחזיר שהפרטים לא תקינים.
איך אפשר לעשות את זה בריאקט?
הולידציות שלי כתובות בסכמה בשרת
תודה רבה רבה!
 

אריאל87

משתמש מקצוען
הנדסת תוכנה

java

משתמש סופר מקצוען
מנוי פרימיום
הנדסת תוכנה
אני רוצה שהוא יחזיר שגיאה מתי שהוא לא הכניס משתמש חדש לדטה בייס כי לא עמד בולידציות (כמו משתמש שלא הכניס את כל הפרטים הנדרשים) איזה סטטוס זה?
400 - Bad request
 

tuty

משתמש פעיל
הנדסת תוכנה

אולי מעניין אותך גם...

הפרק היומי

הפרק היומי! כל ערב פרק תהילים חדש. הצטרפו אלינו לקריאת תהילים משותפת!


תהילים פרק קכד

א שִׁיר הַמַּעֲלוֹת לְדָוִד לוּלֵי יְהוָה שֶׁהָיָה לָנוּ יֹאמַר נָא יִשְׂרָאֵל:ב לוּלֵי יְהוָה שֶׁהָיָה לָנוּ בְּקוּם עָלֵינוּ אָדָם:ג אֲזַי חַיִּים בְּלָעוּנוּ בַּחֲרוֹת אַפָּם בָּנוּ:ד אֲזַי הַמַּיִם שְׁטָפוּנוּ נַחְלָה עָבַר עַל נַפְשֵׁנוּ:ה אֲזַי עָבַר עַל נַפְשֵׁנוּ הַמַּיִם הַזֵּידוֹנִים:ו בָּרוּךְ יְהוָה שֶׁלֹּא נְתָנָנוּ טֶרֶף לְשִׁנֵּיהֶם:ז נַפְשֵׁנוּ כְּצִפּוֹר נִמְלְטָה מִפַּח יוֹקְשִׁים הַפַּח נִשְׁבָּר וַאֲנַחְנוּ נִמְלָטְנוּ:ח עֶזְרֵנוּ בְּשֵׁם יְהוָה עֹשֵׂה שָׁמַיִם וָאָרֶץ:
נקרא  8  פעמים

לוח מודעות

למעלה