اذهب إلى المحتوى

السؤال

نشر

لدي الكود التالي من طرف خادم الويب node.js وأقوم باستخدام express.js:

var express = require('express')
var bodyParser = require('body-parser')

var app = express()

app.use(bodyParser.urlencoded())
app.use(bodyParser.json())

app.listen(5000);

app.post("/", function (req, res) {
  console.log(req.body)
  res.send('Hello World!')
});

ولكن أحصل على body فارغ عند طباعته في console.log. كيف يمكنني حل هذه المشكلة؟

Recommended Posts

  • 1
نشر

إن الوسيط body-parser يقوم فقط بالتعامل مع البيانات من نمط JSON و urlencoded data، ولا يستطيع معالجة البيانات في حال كانت من الشكل multipart على سبيل المثال الفورم الذي يحوي أي صور أو ملفات مع بيانات أخرى.

ولكن بدءً من النسخ الحديثة من express أصبح body-parser مبني ضمنياً ضمنه ولا داعي لوضع السطر السابق في الكود الخاص بتعريف خادم الويب لديك. لذلك يمكنك اختصار هذه المرحلة.

يمكنك بدلاً من ذلك استخدام التالي:

app.use(express.json());

وعندها سيتم التعامل مع النسخة الحديثة من JSON bodies.

أما للمسارات المرمزة من خلال الجسم body ضمن الطلب وفي مثالنا الطلبات من نوع Post بنمط HTTP، يمكنك وضع السطر التالي ضمن الكود:

app.use(express.urlencoded())

أما في حال كانت الطلبات مقتصرة على postman دون وجود كود برمجي كامل (طرف الخادم + طرف العميل من خلال ajax أو غيرها من التقنيات)، يمكنك تحديد النوع raw ضمن الطلب وإضافة التالي ضمن الخيارات:

Content-Type: application/json

ثم يمكنك كتابة البيانات المراد تمريرها إلى الخادم مع التأكد من إحاطة اسماء المتغيرات بعلامة تنصيص مزدوجة والمحافظة على هيئة json وإلا لن يتم إرسال الطلب بالشكل الصحيح:

{
    "name": "test"
}

أما في الحالات التي يتم فيها استخدام بيانات mutlipart، وفي حال كنت تستخدم وسيط مثلاً لرفع الملفات كما هو الحال في multer في node.js، يجب عليك التأكد من تعريف الوسيط وخصائصه بالشكل الصحيح واستخدامه قبل طباعة محتوى الطلب وإلا ستحصل أيضاً على body فارغ حتى لو قمت بتطبيق جميع الطرق السابقة.

  • 0
نشر

يمكنك إختبار الكود الخاص بك باستخدام Postman ، لاختبار إجراءات نشر HTTP مع حمولة بيانات JSON الأولية ، حدد الخيار الأولي واضبط معلمات الرأس التالية:

Content-Type: application/json

تأكد أيضًا من التفاف أي strings مستخدمة كمفاتيح / قيم في حمولة JSON في علامتي اقتباس كهذه " ".  هكذا ستقوم حزمة body-parser بتحليل حمولات JSON الخام متعددة الأسطر بشكل جيد.

{
    "foo": "bar"
}

بعد ذلك بجب  تكوين التطبيق لاستخدام ()bodyParser 

var express = require('express');
var app = express();
var bodyParser = require('body-parser');

// bodyParser()  إستخدام
app.use(bodyParser.urlencoded({
    extended: true
}));
app.use(bodyParser.json());

// ...  أكتب الموجهات الأخرى منا

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...