في محاولتك لرفع ملف وعرضه باستخدام Express وNode.js، يظهر خطأ من نوع TypeError('app.use() requires middleware functions');
. هذا الخطأ يحدث عندما تقوم باستخدام app.use()
بشكل غير صحيح، حيث يتوقع multer
أن يتم تحديد المسار الذي سيتم فيه تخزين الملفات كوظيفة وسيطة (Middleware function)، ولكن يبدو أن هناك خطأ في تكوين multer
.
لحل هذا الخطأ، يمكنك تغيير قطعة الكود المعنية في ملف fileupload.js
كما يلي:
بدلاً من:
javascriptapp.use(multer({ dest: '/tmp/'}));
يمكنك استخدام multer
كدالة وسيطة بدون استخدام app.use()
:
javascriptvar upload = multer({ dest: '/tmp/' });
ثم، قم بتحديد upload
كوظيفة وسيطة في نقطة النهاية المختصة:
javascriptapp.post('/file_upload', upload.single('file'), function (req, res) {
// الكود الحالي لرفع الملفات
});
وبهذا يمكنك حل مشكلتك وتجنب الخطأ الذي تواجهه. بالطبع، تأكد من أنك قد قمت بتثبيت حزمة multer
باستخدام npm أولاً باستخدام:
bashnpm install multer
بعد إجراء هذه التعديلات، يجب أن يعمل التطبيق بشكل صحيح دون أي أخطاء.
المزيد من المعلومات
بالتأكيد، دعني أوسع شرحي حول الكود الخاص بك وأشرح بعض المفاهيم المرتبطة بتحميل الملفات باستخدام Express وNode.js.
أولاً وقبل كل شيء، يتيح لك الكود الذي قدمته إنشاء نموذج بسيط لتحميل الملفات. يستخدم مكتبة multer
للتعامل مع عملية تحميل الملفات، والتي توفر وسائل للتحكم في كيفية تخزين ومعالجة الملفات المرفوعة.
الكود يشير إلى ملف HTML (fileupload.html
) الذي يحتوي على نموذج يسمح للمستخدم بتحديد ملف وإرساله إلى الخادم. يشير النموذج إلى نقطة النهاية /file_upload
باستخدام الطريقة POST.
ثم، في ملف fileupload.js
، يتم تكوين خادم Express وتحديد مجلد مؤقت لتخزين الملفات المرفوعة باستخدام multer({ dest: '/tmp/' })
. ثم يتم استخدام app.post
للتعامل مع الطلبات POST إلى /file_upload
.
تحدث مشكلتك الرئيسية من خلال محاولة استخدام multer
كوسيط عبر app.use
، ولكن يجب استخدامها كوظيفة معينة لنقطة النهاية المستهدفة.
بالنسبة للخطأ الذي واجهته “TypeError: ‘app.use()’ requires middleware functions”، فالتصحيح الذي قدمته يعالج هذا الخطأ بشكل صحيح.
إذا كنت تحتاج إلى مزيد من التوضيح حول أي جزء معين من الكود أو كنت بحاجة إلى مزيد من التفاصيل حول عملية تحميل الملفات باستخدام Express وNode.js، فأنا هنا للمساعدة.