• 0

ما الفرق بين app.render و res.render في node.js

لقد لاحظت وجود كل من app.render و res.render في node.js ولكن في التوثيق الرسمي التفاصيل لكل منهما متشابهة، وكل منها يستدعي callback. ما هو الفرق الأساسي بينهما وماهي الحالات التي يجب فيها استخدام كل واحدة؟

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 1

إن res.render يعتمد على app.render ضمنياً، فهو ليس شيء منفصل أو جديد. ومن بعض الفروقات الأساسية بينهما:

  1. تستطيع استدعاء app.render على المستوى الأول (الجذر root) أما res.render حصراً ضمن وسيط أو مسار.
  2. يعيد app.render دوماً صفحة html ضمن callback أما res.render يعيد ذلك فقط في حال قمت بوضع callback كمعامل ثالث، أما في حال قمت باستدعاء res.render دون معامل ثالث أو callback، سيتم إرسال صفحة html إلى الزبون تلقائياً مع رسالة بالرمز 200. مثال:
//باستخدام app.render

app.render('index', {title: 'app.render example'}, function(err, html) {
    console.log(html)
});

//باستخدام res.render بدون المعامل الثالث
app.get('/home', function(req, res) {
    res.render('index', {title: 'res.render example'})
})

//باستخدام res.render مع معامل ثالث
app.get('/render', function(req, res) {
    res.render('index', {title: 'res.render example'}, function(err, html) {
        console.log(html);
        res.send('Hello');
    })
})

أما من ناحية الاستخدام فعادةً يتم استخدام app.render عند إجراء render للصفحة دون الحاجة لإرسالها إلى المستخدم من خلال http، مثل حالات قوالب البريد الالكتروني مثلاً وغيرها.

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

يوجد عدة فروق بينهما استاذ باسل مثل:

  1. app يعمل فى الroot level بينما res لا يعمل الا فى الroute/middleware
  2. دالة app.render يجب ان تمدها بالcallback وتقم بارجاع الhtml المزود فيه, بينما res.render فإن هذا الأمر اختياري, يمكنك ان لا تمدها بالcallback وفي هذه الحالة سوف تقوم الnodejs بإرجاع status code 200

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

فكر في app.render () كدالة مساعدة لتوليد سلاسل العرض المقدمة. يستخدم res.render () داخليًا app.render () لعرض طرق العرض.

الاختلاف هو  app.renderObject هو المسؤول الوحيد عن توليد views، ولكنه غير قادر على ارسال ال views لل client الشيفرة في الأسفل ستبين أكثر

res.render = function(view, locals, cb){
    app.render(view, locals, function(err, html){
        if(typeof cb !== 'undefined'){
            return cb(err, html);
        }
        res.send(html);
    });
};

 

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

المستندات الخاصة بـ app.render: تقوم بتقديم عرض مع رد اتصال  callback يستجيب مع السلسلة المقدمة. هذا هو المتغير على مستوى التطبيق لـ res.render () ، وبخلاف ذلك يتصرف بنفس الطريقة. أما المستندات لـ res.render: تقوم بتقديم عرض مع رد اتصال يستجيب مع السلسلة المقدمة. عند حدوث خطأ بعد ذلك ، يتم استدعاء  (err )next. عندما يتم توفير رد نداء ، يتم تمرير كل من الخطأ المحتمل والسلسلة المقدمة ، ولا يتم تنفيذ أي استجابة تلقائية كيف يمكنني معرفة متى أستخدم أيهما؟ فيما يلي بعض الاختلافات: يمكنك استدعاء app.render على مستوى الجذر و res.render داخل مسار / برمجية وسيطة فقط. يقوم app.render دائمًا بإرجاع html في وظيفة رد الاتصال ، بينما يقوم res.render بذلك فقط عندما تحدد وظيفة رد الاتصال كمعامل ثالث. إذا اتصلت بـ res.render بدون المعامل الثالث / وظيفة رد الاتصال ، فسيتم إرسال html المقدم إلى العميل برمز الحالة .

// app.render
app.render('index', {title: 'res vs app render'}, function(err, html) {
    console.log(html)
});
// logs the following string (from default index.jade)
<!DOCTYPE html><html><head><title>res vs app render</title><link rel="stylesheet" href="/stylesheets/style.css"></head><body><h1>res vs app render</h1><p>Welcome to res vs app render</p></body></html>
// res.render
// بدون الوسيط الثالث
app.get('/render', function(req, res) {
    res.render('index', {title: 'res vs app render'})
})
//لكنه يرسله للعميل index.jade يعرض أيضًا
//GET /render على text/html مع الحالة 200 والنص من نوع المحتوى
// res.render مع الوسيط الثالث
app.get('/render', function(req, res) {
    res.render('index', {title: 'res vs app render'}, function(err, html) {
        console.log(html);
        res.send('done');
    })
})
//index.jade  ويرسل "تم" إلى العميل بدلاً من ذلك من محتوى  app.render يسجل مثل

يستخدم res.render app.render داخليًا لتقديم ملفات القوالب. يمكنك استخدام وظائف التقديم لإنشاء رسائل بريد إلكتروني بتنسيق html. اعتماداً على هيكل التطبيق الخاص بك ، قد لا يكون لديك دائماً إمكانية الوصول إلى الكائن app .

// على سبيل المثال داخل مسار خارجي
// app.js
var routes = require('routes');
app.get('/mail', function(req, res) {
    // app object is available -> app.render
})
app.get('/sendmail', routes.sendmail);
// routes.js
exports.sendmail = function(req, res) {
    // can't use app.render -> therefore res.render
}

 

تمّ تعديل بواسطة Ali Haidar Ahmad

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن