2012-05-05 20 views
6

मैंने global पर देखने का प्रयास किया है, लेकिन इसमें केवल चर शामिल हैं, फ़ंक्शन नहीं। मैं अपनी स्क्रिप्ट में बनाए गए सभी कार्यों को कैसे सूचीबद्ध कर सकता हूं?मैं अपने नोड जेएस स्क्रिप्ट में सभी कार्यों को कैसे सूचीबद्ध कर सकता हूं?

+0

इसके लिए उपयोग का मामला क्या होगा? – mihai

+1

एक कस्टम एओपी स्क्रिप्ट जिसे मैं नोड ऐप के लिए बना रहा हूं। मैं इसे प्रोफाइलिंग, थ्रॉटलिंग और कस्टम सुरक्षा नीतियों जैसी चीजों के लिए उपयोग करना चाहता हूं। मैंने डोजो की जांच की लेकिन कुछ शुरुआती जांच सिर्फ इसे मेरे नोड ऐप में लोड कर रही थी, इसलिए मैंने सोचा कि मैं एक कस्टम स्क्रिप्ट लिखूंगा। यह मुश्किल नहीं होना चाहिए। – Trindaz

+0

तो क्या आप इसे स्क्रिप्ट के भीतर से ही करना चाहते हैं? मुझे यकीन नहीं है कि यह इतना आसान है क्योंकि आपके पास गुमनाम कार्य, बंद करने के अंदर कार्य, गतिशील रूप से बनाए गए कार्यों आदि हो सकते हैं। – mihai

उत्तर

5

उस फ़ाइल के साथ कमांड लाइन से नोड डीबग चलाएं जिसे आप देखना चाहते हैं। तो फिर तुम सूची (कुछ बड़ी संख्या यहाँ) का उपयोग कर सकते

node debug mini_file_server.js 
< debugger listening on port 5858 
connecting... ok 
debug> scripts 
    26: mini_file_server.js 
debug> list(1000) 
    1 var http = require('http'), 
    2  util = require('util'), 
    3  fs = require('fs'); 
    4 
    5 server = http.createServer(function(req, res){ 
    6  var stream = fs.createReadStream('one.html'), 
    7   stream2 = fs.createReadStream('two.html'); 
    8  console.log(stream); 
    9  console.log(stream2); 
10  stream.on('end', function(){ 
11   stream2.pipe(res, { end:false}); 
12  }); 
13 
14  stream2.on('end', function(){ 
15   res.end("Thats all!"); 
16  }); 
17 
18  res.writeHead(200, {'Content-Type' : 'text/plain'}); 
19  stream.pipe(res, { end:false}); 
20  stream2.pipe(res, { end:true}); 
21 
22 }).listen(8001); 
23 }); 
debug> 
2

समारोह एक नाम है, यह वैश्विक ठीक में दिखाई देंगे: यदि आप कुछ AOP करना चाहते हैं तो

mb-work-laptop:~ markbessey$ node 
> for (var k in global) { console.log(k); } 
global 
process 
GLOBAL 
root 
Buffer 
setTimeout 
setInterval 
clearTimeout 
clearInterval 
console 
module 
require 
k 
> function z(a) { return a*10; } 
> for (var k in global) { console.log(k); } 
global 
process 
GLOBAL 
root 
Buffer 
setTimeout 
setInterval 
clearTimeout 
clearInterval 
console 
module 
require 
k 
z 
> 
> global.z 
[Function: z] 
+0

मैं शपथ ले सकता था कि मैंने इसके लिए परीक्षण किया और पाया कि कार्य वैश्विक में उपलब्ध नहीं थे, लेकिन आपकी स्क्रिप्ट भी मेरे लिए ठीक काम करती है। – Trindaz

+1

क्षमा करें मार्क मैंने इसे उत्तर के रूप में दिखाया है - यह कंसोल में ठीक काम करता है, लेकिन स्क्रिप्ट फ़ंक्शन एक() {वापसी 1; } के लिए (वैश्विक में var k) console.log (k) यह फ़ंक्शन 'ए' नहीं दिखाता है। – Trindaz

+0

दाएं।जैसा कि यह पता चला है, इंटरैक्टिव मोड में, ये परिभाषाएं वैश्विक में जाती हैं, लेकिन यदि आप "node script.js" से एक स्क्रिप्ट चलाते हैं, तो वे मॉड्यूल में स्थानीय के रूप में समाप्त होते हैं। डीबगर से उस जानकारी को प्राप्त करने का निश्चित रूप से एक तरीका है, लेकिन यह सुनिश्चित नहीं है कि स्क्रिप्ट इसे एक्सेस कर सकती है या नहीं ... –

0

, मार्ग एएसटी है।

आप अपने स्वयं के एओपी ढांचे को कुछ: http://esprima.org के साथ बना सकते हैं।

या आप इतना जटिल नहीं पहलुओं के लिए node-burrito, उत्कृष्ट आज़मा सकते हैं:

var burrito = require('burrito'); 

var src = burrito('someCall()', function (node) { 
    if (node.name === 'call') node.wrap('qqq(%s)'); 
}); 

qqq(somecall()) 
3

यह डिबगर जैसे और अधिक उन्नत दर्शाती उपकरण के बिना नोड में असंभव है उत्पन्न होगा।

ऐसा करने का एकमात्र तरीका __parent__ का उपयोग करना होगा जो सुरक्षा समस्याओं और अन्य चीजों के कारण हटा दिया गया था। मार्क बेस्से की तरह, जब आप स्क्रिप्ट चलाते हैं तो वे चर मॉड्यूल क्लोजर चर बन जाते हैं। आप स्पष्ट रूप से उन्हें निर्यात किए बिना कहीं और नहीं पहुंच सकते हैं।

यह एक बग नहीं है, यह डिज़ाइन द्वारा है। यह सिर्फ नोड कैसे काम करता है। हालांकि, अगर आप सिर्फ अपने उपयोगकर्ताओं समारोह अभिव्यक्ति कार्य लिखने के लिए पूछना, सभी ए-ठीक काम करेगा:

module.exports = { 
    a:function(){ 
     //same logic you had in the function declaration 
    } 
} 

उसके बाद, आप आसानी से पर विचार करने और module.exports गणना और सभी फ़ंक्शन नाम प्राप्त कर सकते हैं।

संबंधित मुद्दे

 संबंधित मुद्दे