जावास्क्रिप्ट नोड। अगला ()


148

मैं nextनोड में बहुत सारे उपयोग देखता हूं । जेसेज

यह क्या है, यह कहां से आता है? यह क्या करता है? क्या मैं इसका ग्राहक पक्ष उपयोग कर सकता हूं?

क्षमा करें, इसका उदाहरण यहाँ दिया गया है: http://dailyjs.com/2010/12/06/node-tutorial-5/

लोडर फ़ंक्शन के लिए देखें।


मैंने इसे कहीं नहीं देखा है, और यह कहीं भी प्रलेखन में संदर्भित नहीं है। क्या आप सुनिश्चित हैं कि यह आपके द्वारा देखे जा रहे कोड आधार में कहीं परिभाषित नहीं है?
समीर तलवार

यह बहुत अस्पष्ट है। क्या आप संदर्भ का एक उदाहरण दे सकते हैं।
रेयनोस

जवाबों:


114

यह Node.js नियंत्रण-प्रवाह कोड में एक चर नामकरण सम्मेलन प्रतीत होता है, जहां निष्पादित करने के लिए अगले फ़ंक्शन का संदर्भ कॉलबैक के लिए दिया जाता है जब इसे किया जाता है।

उदाहरण के लिए, कोड के नमूने यहां देखें:

आइए आपके द्वारा पोस्ट किए गए उदाहरण को देखें:

function loadUser(req, res, next) {
  if (req.session.user_id) {
    User.findById(req.session.user_id, function(user) {
      if (user) {
        req.currentUser = user;
        return next();
      } else {
        res.redirect('/sessions/new');
      }
    });
  } else {
    res.redirect('/sessions/new');
  }
}

app.get('/documents.:format?', loadUser, function(req, res) {
  // ...
});

loadUserसमारोह इसके तीसरा तर्क है, जो नाम के लिए बाध्य है में एक समारोह की उम्मीद है next। यह एक सामान्य फंक्शन पैरामीटर है। यह प्रदर्शन करने के लिए अगली क्रिया का संदर्भ रखता है और इसे एक बार loadUserकिया जाता है (जब तक कि उपयोगकर्ता नहीं मिल सकता है)।

nextइस उदाहरण में नाम के बारे में कुछ खास नहीं है ; हम इसे कुछ भी नाम दे सकते थे।


यह भी express.js में काफी उपयोग किया जाता है, लेकिन यह नहीं है .next()। वह nextकिसी वस्तु पर एक विधि के रूप में पूछना चाहता है ।
रेयानोस

1
बेहतर उपयोग करने के लिएreturn next();
रयान वाल्टन

2
@ रयानवेल्टन I सहमत
वेन

मैंने return callback()इसके बजायreturn next()
vijay

39

यह उन कन्वेंशन का नामकरण है, जो कॉलबैक को उन परिस्थितियों में पारित करने के लिए उपयोग किया जाता है, जिनमें क्रियाओं के क्रमिक निष्पादन की आवश्यकता होती है, जैसे स्कैन डायरेक्टरी -> फ़ाइल डेटा पढ़ें -> डेटा के साथ कुछ करें। यह कॉलबैक को गहराई से नेस्ट करने के लिए प्राथमिकता में है। टिम कैसवेल के HowToNode ब्लॉग पर निम्नलिखित लेख के पहले तीन खंड इस का एक अच्छा अवलोकन देते हैं:

http://howtonode.org/control-flow

उस पोस्ट के दूसरे भाग के अनुक्रमिक कार्य अनुभाग भी देखें :

http://howtonode.org/control-flow-part-ii


1
इस लिंक के लिए बहुत बहुत धन्यवाद। यह बहुत सी बातें समझाता है जब नोडज के साथ काम करना शुरू होता है
हसाम अब्देलिल्लाह

लिंक अभी काम नहीं कर रहा है। यह आंतरिक सर्वर त्रुटि दे रहा है
दीप कक्कड़

1
इंटरनेट संग्रह से अपडेट किए गए लिंक
पेरो पी।

लिंक के लिए धन्यवाद, मैंने कुछ महीनों पहले नोड का उपयोग करना शुरू कर दिया था, लेकिन मैं इन प्रथाओं का उपयोग करके खुद को ढूंढता हूं, लेकिन उन्हें पूरी तरह से समझ नहीं पा रहा हूं
चार्ल्स स्मिथ

8

यह मूल रूप से एक कॉलबैक की तरह होता है जो कोड के एक निश्चित भाग के बाद एक्सप्रेस.जेएस का उपयोग करता है और किया जाता है, आप इसका उपयोग यह सुनिश्चित करने के लिए कर सकते हैं कि कोड का हिस्सा हो गया है और आप आगे क्या करना चाहते हैं, लेकिन हमेशा केवल आप ही ध्यान रखें कोई एक कार्य करें res.sendअपने प्रत्येक में बाकी ब्लॉक ...

तो आप इस तरह से एक साधारण next()उदाहरण के रूप में कुछ कर सकते हैं :

app.get("/", (req, res, next) => {
  console.log("req:", req, "res:", res);
  res.send(["data": "whatever"]);
  next();
},(req, res) =>
  console.log("it's all done!");
);

यह बहुत उपयोगी है जब आप अपने ऐप में एक मिडलवेयर रखना चाहते हैं ...

मिडलवेयर फंक्शन को लोड करने के लिए, एप को यूज करें (), मिडिलवेयर फंक्शन को निर्दिष्ट करें। उदाहरण के लिए, निम्न कोड रूट पथ (/) के लिए मार्ग से पहले myLogger मिडलवेयर फ़ंक्शन को लोड करता है।

var express = require('express');
var app = express();

var myLogger = function (req, res, next) {
  console.log('LOGGED');
  next();
}

app.use(myLogger);

app.get('/', function (req, res) {
  res.send('Hello World!');
})

app.listen(3000);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.