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

Tamim Fahed

الأعضاء
  • المساهمات

    124
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    1

أجوبة بواسطة Tamim Fahed

  1. لقد قمت ببناء مشروع بسيط في إطار العمل express ضمن node.js ولكن عندما أقوم بتشغيل المشروع يظهر الخطأ التالي ولا يتم تشغيل الخادم:

    module.js:340
        throw err;
              ^
    Error: Cannot find module 'express'
        at Function.Module._resolveFilename (module.js:338:15)
        at Function.Module._load (module.js:280:25)
        at Module.require (module.js:364:17)
        at require (module.js:380:17)
        at Object.<anonymous> (C:\myproject\app.js:6:9)
        at Object.<anonymous> (C:\myproject\app.js:25:4)
        at Module._compile (module.js:456:26)
        at Object.Module._extensions..js (module.js:474:10)
        at Module.load (module.js:356:32)
        at Function.Module._load (module.js:312:12)

    مع العلم أنني قمت بتحميل الحزمة express من خلال الأمر التالي:

    npm install -g express

    ماهي المشكلة هنا؟ ولماذا لا يتم التعرّف عليها في مشروعي؟

    • أعجبني 1
  2. لقد قمت بإنشاء مشروع جديد من خلال express generator ولاحظت وجود مسار جديد فيه الملف:

    ./bin/www

     وفيه المعلومات الأساسية لتشغيل الخادم والمنفذ أما بقية الكود الخاص بالمسارات فهو موجود ضمن الملف الرئيسي app.js 

    ولكن اعتدت في النسخ السابقة من express بتعريف المعلومات الأساسية اللازمة لتشغيل الخادم والمنفذ ضمن الملف الرئيسي بجانب المسارات، فلماذا تم فصل هذه المعلومات إلى هذا الملف هنا؟

    وأيضاً اعتدت على تشغيل مشروعي من خلال الأمر التالي:

    node app.js

    والآن عندما اطلعت على package.json وجدت التالي:

    "scripts": {
        "start": "node ./bin/www"
    }

    فهل يجب علي تشغيل المشروع من خلال الأمر node ./bin/www ؟ أم npm start ؟

    • أعجبني 1
  3. لتجنب مشاكل AJAX التابعة لنفس اسم النطاق، أود جعل طرف الخادم من node.js بتحويل جميع الطلبات من مسار محدد (مثال: /api/xxx) إلى خادم آخر (مثال: anotherwebsite.com:5000/xxx) ,ويعيد نفس النتائج التي قد يعيدها الخادم الأول الأساسي دون أن يحدث أي فارق من طرف المستخدم ودون أن يشعر بالفرق. أما بقية المسارات (مثل: api/*) يتم تخديمها من الخادم الأول ولا يتم تحويلها إلى الخادم الثاني. أي فقط مجموعة طلبات محددة سيتم تحويلها وليس جميع الطلبات.

    فكيف يمكنني إضافة هذه الطبقة كـ proxy والتي ستقوم بدورها بتحويل هذه الطلبات إلى الخادم الآخر ضمن express.js ؟ هل يوجد كود مباشر أستطيع تضمينه أم أحتاج لتثبيت حزم إضافية لتحقيق ذلك؟

    • أعجبني 1
  4. لقد قمت بإنشاء مشروع express.js جديد باستخدام الأوامر التالية:

    express -e myBlog
    npm install ejs --save
    npm install

    ولكن عندما أحاول تشغيل المشروع بهذا الأمر:

    node app.js

    يظهر لي هذا الخطأ:

    events.js:72
        throw er; // Unhandled 'error' event
              ^
    Error: listen EADDRINUSE
        at errnoException (net.js:884:11)
        at Server._listen2 (net.js:1022:14)
        at listen (net.js:1044:10)
        at Server.listen (net.js:1110:5)
        at Object.<anonymous> (myBlog/app.js:33:24)
        at Module._compile (module.js:456:26)
        at Object.Module._extensions..js (module.js:474:10)
        at Module.load (module.js:356:32)
        at Function.Module._load (module.js:312:12)
        at Function.Module.runMain (module.js:497:10)

    كيف يمكنني حل هذه المشكلة؟

    • أعجبني 1
  5. لقد قمت بكتابة كود بسيط لتشغيل خادم node.js، ولكن عندما أقوم بتنفيذ الأمر التالي لتشغيل الخادم:

    npm start

    يظهر لي الخطأ التالي:

    npm ERR! Windows_NT 6.3.9600
    npm ERR! argv "C:\\Program Files\\nodejs\\\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "start"
    npm ERR! missing script: start
    npm ERR!
    npm ERR! If you need help, you may report this error at:
    npm ERR!     <https://github.com/npm/npm/issues>npm ERR! Please include the following file with any support request:

    كيف يمكنني حل هذه المشكلة؟

    • أعجبني 1
  6. أقوم باستخدام حزمة التوثيق passport.js في خادم node.js، والكود لدي بهذا الشكل:

    'use strict';
    
    var express = require('express');
    var passport = require('passport');
    var LocalStrategy = require('passport-local').Strategy;
    
    var app = express();
    
    module.exports = function setupServer(){
    
    app.use(express.bodyParser());
    app.use(express.cookieParser());
    app.use(express.session({ secret: 'secretKeyHere' }));
    app.use(passport.initialize());
    app.use(passport.session());
    
    passport.use(new LocalStrategy(function(username, password, result) {
      if (username === 'test' && password === 'test') {
        console.log('Success');
        result(null, {username});
      } else {
        result(null, false);
      }
    }));
    
    app.post('/login', passport.authenticate('local', {
      successRedirect: '/loggedIn',
      failureRedirect: '/guest'
    }));
    
    
    app.listen(5000);
    console.log('Server listening on port 5000');
    
    }();

    ولكن يظهر لي الخطأ التالي دوماً:

    Error: failed to serialize user into session

    كيف يمكنني تجاوز هذا الخطأ؟

    • أعجبني 1
  7. أحاول إضافة خصائص أخرى إلى الطلب req من خلال وسطاء middlewares باستخدام typescript، مثلاً بهذا الشكل:

    app.use((req, res, next) => {
        req.newKey = setProperty(); 
        next();
    });

    بحيث يتم عبر typescript من خلال هذا الوسيط إضافة بعض القيم إلى الغرض req والوصول إليها ضمن التوابع الأخرى. كيف يمكنني تنفيذ مايشبه ذلك؟

    • أعجبني 1
  8. يوجد معاملات أساسية مع كل طلب أو مسار في إطار العمل express.js وهما req , res :

    app.get('/test/:data', function(req, res){
        res.send('data: ' + req.params.data);
    });

    ماهي وظيفة هذه المعاملات؟ وهل يمكنني تغيير اسمائها إلى شيء آخر؟ وهل استخدامها معاً ضروري أو يمكن الاستغناء عنها في هذا التابع function ؟

    • أعجبني 1
  9. أحاول إضافة الشهادة وتعديل الاتصال إلى اتصال آمن https، وقمت باتباع الخطوات المذكورة في التوثيق الرسمي ل node.js:

    var https = require('https');
    var fs = require('fs');
    
    var options = {
      key: fs.readFileSync('test/test-key.pem'),
      cert: fs.readFileSync('test/test-cert.pem')
    };
    
    https.createServer(options, function (req, res) {
      res.writeHead(200);
      res.end("hi");
    }).listen(3000);

    والآن عندما أقوم بتجربة الرابط من خلال curl مع وضع https:// تظهر لي العبارة " hi " أما عندما أقوم بوضع http يظهر لي الخطأ التالي:

    curl: (52) Empty reply from server

    كيف يمكنني إضافة وسيط معيّن لتحويل الاتصال من http إلى https بشكل تلقائي؟

    • أعجبني 2
  10. لدي مشروع مبني باستخدام إطار العمل express في node.js ولدي أيضاً خوارزمية معيّنة ضمن بايثون أرغب باستخدامها على البيانات التي يتم الحصول عليها من خلال كود node.js

    هل هنالك طريقة لاستدعاء بعض التوابع من كود بايثون إلى node.js؟ وكيف سيتم تمرير المعطيات والنتائج بينهما؟

    • أعجبني 2
  11. لدي مجلّد pages فيه بعض صفحات الموقع ومنها index.html، وأحاول عرضها من خلال node.js بالكود التالي:

    var express = require('express');
    var app = express.createServer();
    
    app.use(express.staticProvider(__dirname + '/public'));
    
    app.get('/', function(req, res) {
        res.render('index.html');
    });
    
    app.listen(3000, '127.0.0.1')

    ولكن يظهر لي هذا الخطأ:

    Error: Cannot find module 'html'

    كيف يمكنني حل هذه المشكلة؟

  12. لدي بعض مسارات التوجيه ضمن خادم node.js بهذا الشكل:

    var express = require('express');
    var jade = require('jade');
    var http = require("http");
    
    var app = express();
    var server = http.createServer(app);
    
    app.get('/', function(req, res) {
        res.render('index.jade', context);
    });
    
    app.post('/test', function(req, res) {
        res.redirect('/');
    });

    أرغب بالتحقق من بعض القيم عند المسار test وفي حال كانت غير صحيحة، يجب أن يتم إعادة التوجيه إلى المسار الرئيسي / مع إضافة بعض المتغيرات إلى المسار (كرسالة بشير إلى فشل التحقق). كيف يمكنني تحقيق ذلك وإضافة هذه القيم إلى التابع redirect ؟

  13. لقد قمت بتجربة مشروع بسيط باستخدام express.js في خادم node.js وقمت بكتابة الكود التالي:

    var express = require("express"),
        app = express.createServer();
    app.use(express.static(__dirname + '/styles'));
    app.listen(5000);

    والمجلدات الموجودة ضمن المشروع موزّعة بهذا الشكل:

    home.js
    /styles
      main.css

    ولكن عندما أحاول الوصول إلى ملف التنسيقات من خلال المتصفح: http://localhost:5000/styles/main.css يظهر لي الخطأ التالي:

    Cannot GET / styles /
    main.css

    كيف يمكنني حل هذه المشكلة؟

  14. أقوم بتمرير بعض المتغيرات في الطلب من النوع GET إلى خادم الويب node.js، وأعلم أنه يمكنني الحصول على قيم هذه المتغيرات ضمن express كالتالي:

    var param = req.query.param;

    ولكن لا أستخدم إطار express في مشروعي، فكيف يمكنني الحصول على هذه القيم ضمن node.js فقط؟

    • أعجبني 2
  15. أحاول إيجاد طريقة لإنشاء والكتابة على ملف نصي من خلال node.js مباشرةً أي من ضمن الكود البرمجي. كيف يمكنني تنفيذ ذلك؟ وماهي الحزمة التي يجب أن أقوم باستخدامها؟

    • أعجبني 1
  16. لقد قمت بإضافة الترويسة التالية إلى الطلبات في خادم node.js للوصول إلى طول البيانات خلال الطلب:

    res.set({'Content-Type':'text/plain;charset=utf-8', 'Content-Length': Buffer.byteLength(data, 'utf-8')});   

    وعندما أقوم بطباعة المحتوى أحصل على حجم البيانات كما هو، لكن إذا قمت باستعراضها ضمن المتصفح في الكونسول أرى جميع الخصائص عدى الخاصية content-length:

    Connection:keep-alive
    Content-Encoding:gzip
    Content-Type:text/plain;charset=utf-8
    Date:Sat, 17 Aug 2021 08:21:59 GMT
    Transfer-Encoding:chunked
    Vary:Accept-Encoding
    X-Powered-By:Express 

    لماذا تختفي هنا content-length؟ وكيف يمكنني ضمان وجودها مع جميع الطلبات التي سيتم إرسالها؟

    • أعجبني 1
  17. لقد حاولت إضافة cookie من قبل الخادم إلى الطلب من خلال الكود التالي في node.js:

    res.setHeader('Set-Cookie','testing=testuser');
    res.cookie('testcookie', 'hello', { maxAge: 900000 });

    ولكن عند الدخول إلى الكونسول والبحث عن ملفات تعريف الارتباط أجدها فارغة ولا أتمكن من الوصول إلى هذه القيم من طرف المستخدم.

    كيف يمكنني حل هذه المشكلة؟

  18. أحاول إضافة التوثيق ل API مبنية بإطار العمل express.js في node.js، ويتم إرسال الطلبات من قبل الزبون باستخدام axios. استطعت إيجاد الحقل Set-Cookie ضمن الطلب من خلال استعراضه:

    Access-Control-Allow-Origin: *
    Connection: keep-alive
    Content-Length: 355
    Content-Type: application/json; charset=utf-8
    Date: Mon, 27 Jul 2021 05:59:01 GMT
    ETag: W/"163-PAMc87SVHWkdimTJca7oRw"
    Set-Cookie: token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...; Max-Age=3.6; Path=/; Expires=Fri, Mon, 27 Jul 2021 05:59:01 GMT ; HttpOnly
    X-Powered-By: Express

    ولكن لا يتم إضافة ال cookies فعلياً. هل يوجد طريقة لأستطيع إضافتها وإكمال التوثيق من خلال axios؟

    • أعجبني 1
  19. أستخدم إطار العمل express النسخة 2 في node.js ووجدت طريقة لتمرير المتغيرات مع ال view من خلال استخدام المتغيّر locals:

    res.render("myTemplate", { locals: { user: "test1" } });

    ولكن هل يوجد طريقة باستخدام globals بدلاً من locals ؟ أي استخدام متغيرات موجودة بأماكن أخرى من الكود بشكل عام؟ وفي حال قمت بالتحديث للنسخة الأحدث من express كيف يمكنني تمرير القيم بشكل عام بين أجزاء الكود البرمجي؟

  20. أقوم باستخدام إطار العمل express.js وحاولت وضع كود بسيط كالتالي:

    var express = require('express');
    var app = express();
    
    app.all('*', (req, res) => {
      res.sendFile(__dirname+'/index.html')
    })
    
    var server = app.listen(3000, () => {
      const host = server.address().address
      const port = server.address().port
    })

    ولكن أحصل على الخطأ التالي ضمن الكونسول:

    SyntaxError: expected expression, got '<'

    ولا يظهر أي شيء ضمن الصفحة. كيف يمكنني حل هذه المشكلة؟

    • أعجبني 1
  21. أستخدم request لإرسال طلب https إلى خادم الويب، ولكن مهما أقوم بتمرير متغيرات أحصل على الخطأ التالي:

    CERT_HAS_EXPIRED

    وهذا هو الكود الخاص بإرسال الطلب:

    request({
            url: 'https://www.example.com/api/users',
        }, function(error, response, body) {
            if(!error && response.statusCode == 200) {
                res.json(JSON.parse(body));
            } else {
               res.json(response.statusCode, {'error': 'error'})
            }
    });

    حاولت إضافة المتغيّر strictSSL: false إلى الطلب ولكن بقي نفس الخطأ. كيف يمكنني حل هذه المشكلة؟

    • أعجبني 1
×
×
  • أضف...