על שליחת פרמטרים בלי Content Type (ולמה התקלקל לי הדמו בוובינר אתמול)
במהלך וובינר על Next.JS שהעברתי אתמול ניסיתי לשלוח הודעה לשרת מתוך curl עם הפקודה הבאה:
$ curl -X POST -d hello 'localhost:3000/api/todos'
קוד צד השרת שקיבל את ההודעה נראה כך:
export default function handler(req, res) {
console.log(`add ${JSON.stringify(req.body)}`);
addTodo(req.query.text);
console.log(`todos = ${JSON.stringify(getTodos())}`);
res.status(200).json({});
}
וכמו שקורה לעתים קרובות כשמנסים לאלתר במהלך Live Coding הקוד לא עבד. במקום ש req.body יכיל את המילה hello כמו שהתכוונתי שיקרה, הוא הכיל אוביקט. תוצאת ההדפסה היתה:
add {"hello":""}
כלומר req.body הכיל אוביקט עם מפתח יחיד בשם hello וערך ריק.
מה?
בחזרה ל curl, המתג -d
אומר שמה שיבוא אחריו הוא גוף ההודעה, והמתג -X POST
אומר שאני שולח בקשה מסוג POST. בסך הכל יש לנו בקשת POST שגוף ההודעה שלה מורכב מהמילה הבודדת hello. אז איך req.body הגיע להיות אוביקט, ואיך hello הגיע להיות המפתח?