एक मूल एक्सप्रेस.जेएस एप्लिकेशन बनाया और एक मॉडल जोड़ा (थिंक और रीथिंकडीबी का उपयोग करके) जेड फ़ाइल में परिवर्तन फ़ीड पास करने की कोशिश कर रहा है और यह पता लगाने में असमर्थ है कि फ़ीड के परिणामों को कैसे पास किया जाए। मेरी समझ यह है कि परिवर्तन() अनंत कर्सर देता है। इसलिए इसे हमेशा नए डेटा का इंतजार रहता है। एक्सप्रेस रेस में इसे कैसे संभालें। कोई विचार मैं यहाँ क्या खो रहा हूँ?

    var express = require('express');
var router = express.Router();
var thinky = require('thinky')();
var type = thinky.type;
var r = thinky.r;

var User = thinky.createModel('User', {
    name: type.string()   
});
//end of thinky code to create the model


// GET home page. 
router.get('/', function (req, res) {
    var user = new User({name: req.query.author});
    user.save().then(function(result) {      
        console.log(result);
    });
    //User.run().then(function (result) {
        //res.render('index', { title: 'Express', result: result });
    //});
    User.changes().then(function (feed) {
        feed.each(function (err, doc) { console.log(doc);}); //pass doc to the res
        res.render('index', { title: 'Express', doc: doc}) //doc is undefined when I run the application. Why?
    });
    });
module.exports = router;
1
Marco 15 फरवरी 2017, 00:15

1 उत्तर

सबसे बढ़िया उत्तर

मुझे लगता है कि आप जिस समस्या का सामना कर रहे हैं वह यह है कि feed.each एक लूप है जो फ़ीड में निहित प्रत्येक आइटम के लिए निहित फ़ंक्शन को कॉल कर रहा है। तो console.log(doc) में निहित doc तक पहुंचने के लिए आपको अपना कोड उस फ़ंक्शन में रखना होगा जिसमें doc मौजूद है (चर के दायरे में है doc ), या आपको दस्तावेज़ मूल्यों को संग्रहीत करने के लिए वैश्विक चर बनाने की आवश्यकता होगी।

उदाहरण के लिए, मान लें कि doc एक स्ट्रिंग है और आप सभी doc को एक सरणी में रखना चाहते हैं। आपको एक वैरिएबल बनाकर शुरुआत करनी होगी जिसका दायरा res.render है, जो इस उदाहरण के लिए MYDOCS होगा। फिर आपको प्रत्येक दस्तावेज़ को इसमें संलग्न करना होगा, और उसके बाद जब भी आप feed.each फ़ंक्शन के बाहर किसी दस्तावेज़ तक पहुंचने का प्रयास कर रहे हों तो आप बस MYDOC का उपयोग करेंगे।

var MYDOCS=[];
User.changes().then(function (feed){
    feed.each(function (err, doc) { MYDOCS.push(doc)});
});
router.get('/', function (req, res) {
    var user = new User({name: req.query.author});
    user.save().then(function(result) {      
        console.log(result);
    });
    //User.run().then(function (result) {
        //res.render('index', { title: 'Express', result: result });
    //});
        res.render('index', { title: 'Express', doc: MYDOCS[0]}) //doc is undefined when I run the application. Why?
    });
module.exports = router;
1
Mohammad Ali 16 फरवरी 2017, 05:45
हाय मोहम्मद, मैं अपने प्रश्न का उत्तर देने के लिए समय निकालने की सराहना करता हूं लेकिन यह काम नहीं किया। doc अभी भी अपरिभाषित है। मुझे इसे सामने से पास करने के लिए socket.io को एकीकृत करना होगा। मुझे उम्मीद है कि Express.js का अगला संस्करण डीबी से रीयल टाइम अपडेट के बारे में सोचेगा। यह एक महत्वपूर्ण विशेषता है जिस पर प्रत्येक नए ढांचे को विचार करना चाहिए।
 – 
Marco
16 फरवरी 2017, 04:46
यदि आप res.render से ठीक पहले कंसोल.लॉग MYDOCS जोड़ते हैं, तो क्या आपको आउटपुट मिलता है?
 – 
Mohammad Ali
16 फरवरी 2017, 04:48
हां। लेकिन यह वही मुद्दा है जो मेरे पास पहले था।
 – 
Marco
16 फरवरी 2017, 04:58
मुझे लगता है कि मैंने इस सवाल का गलत अर्थ निकाला होगा। क्या आप एप्लिकेशन के जीवन के सभी परिवर्तनों को res में जोड़ने का प्रयास कर रहे हैं? या केवल पृष्ठ अनुरोध के दौरान होने वाले परिवर्तन?
 – 
Mohammad Ali
16 फरवरी 2017, 05:37
हां, एप्लिकेशन की लाइफ (लाइव अपडेट को यूजर डैशबोर्ड पर पुश किया जाना है) पेज रिक्वेस्ट के दौरान नहीं। मेरी गलती। अंतिम लक्ष्य की व्याख्या नहीं की।
 – 
Marco
16 फरवरी 2017, 05:40