2014-09-01 9 views
7

मुझे नीचे दिखाए गए कोड को चलाने में त्रुटि क्यों मिलती है? (यह Coursera पर स्टैनफोर्ड 'स्टार्टअप इंजीनियरिंग' पाठ्यक्रम में होमवर्क में से एक में उपयोग किया जाता है: https://class.coursera.org/startup-001/quiz/attempt?quiz_id=149)मुझे "TypeError: ऑब्जेक्ट फ़ंक्शन नहीं है" क्यों मिलता है यह उदाहरण node.js कोड चला रहा है?

पाठ्यक्रम जून-सेप्ट 2013 में चला गया, इसलिए हो सकता है कि स्क्रिप्ट को तोड़ने वाले नोड या सीएसवी के अपडेट हो सकते हैं, शायद? होमवर्क स्क्रिप्ट को ठीक करने के बारे में नहीं है, इसलिए यह सवाल 'धोखा' नहीं है, और पाठ्यक्रम वर्तमान में चल रहा नहीं है ..

तो, पर्यावरण है: उबंटू 14.04 (कर्नेल 3-13-0- 29-सामान्य), नोड v0.11.13, NPM v1.4.9

और मैं npm install 'घ csv, util और घर निर्देशिका में restler, और स्क्रिप्ट लेखांकन वहाँ भी है है।

यह मैं पूरी तरह से स्टम्प्ड है .... :-(

त्रुटि संदेश:

[[email protected]:~]$node market-research.js 
Invoked at command line. 
Wrote market-research.csv 
Symbol Name Market Cap  Previous Close Price P/E Ratio  Shares EPS Earnings 
/home/ubuntu/market-research.js:47 
    csv() 
    ^
TypeError: object is not a function 
    at csv2console (/home/ubuntu/market-research.js:47:5) 
    at Request.response2console (/home/ubuntu/market-research.js:65:13) 
    at Request.EventEmitter.emit (events.js:110:17) 
    at Request.mixin._fireSuccess (/home/ubuntu/node_modules/restler/lib/restler.js:226:10) 
    at /home/ubuntu/node_modules/restler/lib/restler.js:158:20 
    at IncomingMessage.parsers.auto (/home/ubuntu/node_modules/restler/lib/restler.js:394:7) 
    at Request.mixin._encode (/home/ubuntu/node_modules/restler/lib/restler.js:195:29) 
    at /home/ubuntu/node_modules/restler/lib/restler.js:154:16 
    at Request.mixin._decode (/home/ubuntu/node_modules/restler/lib/restler.js:170:7) 
    at IncomingMessage.<anonymous> (/home/ubuntu/node_modules/restler/lib/restler.js:147:14) 
[[email protected]:~]$ 

कोड: स्क्रिप्ट के द्वारा बनाई गई बाजार research.csv की

#!/usr/bin/env node 
    /* 
    Use the Yahoo Finance CSV API to do some basic market research calculations. 

    - Background: http://greenido.wordpress.com/2009/12/22/yahoo-finance-hidden-api/ 
    - Example URL: http://finance.yahoo.com/d/quotes.csv?s=GOOG+FB+AAPL&f=snj1pr 
     s: Symbol 
     n: Name 
     j1: Market Capitalization (in billions) 
     p: Price-per-share (at previous close) 
     r: Price to Earnings Ratio 

    Further references. 

    - https://github.com/danwrong/restler 
    - https://github.com/wdavidw/node-csv 
    - http://josscrowcroft.github.io/accounting.js 
    - http://stackoverflow.com/questions/4981891/node-js-equivalent-of-pythons-if-name-main 
    - http://nodejs.org/docs/latest/api/util.html#util_util_format_format 

    */ 

    var util = require('util'); 
    var fs = require('fs'); 
    var rest = require('restler'); 
    var csv = require('csv'); 
    var accounting = require('accounting'); 
    var CSVFILE_DEFAULT = "market-research.csv"; 
    var SYMBOLS_DEFAULT = ["GOOG", "FB", "AAPL", "YHOO", "MSFT", "LNKD", "CRM"]; 
    var COLUMNS_DEFAULT = 'snj1pr'; // http://greenido.wordpress.com/2009/12/22/yahoo-finance-hidden-api 
    var HEADERS_DEFAULT = ["Symbol", "Name", "Market Cap", "Previous Close Price", 
          "P/E Ratio", "Shares", "EPS", "Earnings"]; 

    var financeurl = function(symbols, columns) { 
     return util.format(
      'http://finance.yahoo.com/d/quotes.csv?s=%s&f=%s', 
      symbols.join('+'), 
      columns); 
    }; 

    var marketCapFloat = function(marketCapString) { 
     return parseFloat(marketCapString.split('B')[0]) * 1e9; 
    }; 

    var csv2console = function(csvfile, headers) { 
     console.log(headers.join("\t")); 
     csv() 
     .from.path(csvfile) 
     .on('record', function(row, index) { 
      var shares = Math.round(marketCapFloat(row[2])/row[3], 0); 
      var eps = (row[3]/row[4]).toFixed(3); 
      var earnings = accounting.formatMoney(eps * shares); 
      outrow = row.concat([shares, eps, earnings]); 
      console.log(outrow.join("\t")); 
     }); 
    }; 

    var buildfn = function(csvfile, headers) { 
     var response2console = function(result, response) { 
      if (result instanceof Error) { 
       console.error('Error: ' + util.format(response.message)); 
      } else { 
       console.error("Wrote %s", csvfile); 
       fs.writeFileSync(csvfile, result); 
       csv2console(csvfile, headers); 
      } 
     }; 
     return response2console; 
    }; 

    var marketResearch = function(symbols, columns, csvfile, headers) { 
     symbols = symbols || SYMBOLS_DEFAULT; 
     columns = columns || COLUMNS_DEFAULT; 
     csvfile = csvfile || CSVFILE_DEFAULT; 
     headers = headers || HEADERS_DEFAULT; 
     var apiurl = financeurl(symbols, columns); 
     var response2console = buildfn(csvfile, headers); 
     rest.get(apiurl).on('complete', response2console); 
    }; 

    if(require.main == module) { 
     console.error('Invoked at command line.'); 
     var symbols = process.argv; 
     if(symbols.length > 2) { 
      symbols = symbols.slice(2, symbols.length); 
     } else { 
      symbols = undefined; 
     }; 
     marketResearch(symbols); 
    } else { 
     console.error('Invoked via library call'); 
    } 

    exports.marketResearch = marketResearch; 

सामग्री :

"GOOG","Google Inc.",386.6B,569.20,29.49 
    "FB","Facebook, Inc.",194.5B,73.855,78.49 
    "AAPL","Apple Inc.",613.8B,102.25,16.49 
    "YHOO","Yahoo! Inc.",38.302B,38.31,33.11 
    "MSFT","Microsoft Corpora",374.3B,44.88,17.06 
    "LNKD","LinkedIn Corporat",27.747B,223.26,N/A 
    "CRM","Salesforce.com In",36.577B,58.29,N/A 
+0

मॉड्यूल सीएसवी सही ढंग से स्थापित किया गया है:

इस प्रकार मैं अब सीएसवी-सांत्वना समारोह में लिखा है? आप किस संस्करण का उपयोग कर रहे हैं और आप कहां उपयोग कर रहे हैं? क्या आपने इसे इस्तेमाल करने से पहले सीएसवी var लॉगिंग करने का प्रयास किया है? – matteospampani

+1

क्या आप वाकई सही संस्करण का उपयोग कर रहे हैं? वर्तमान संस्करण का एपीआई आपके कोड के अनुसार अलग दिखता है। –

+0

मुझे लगता है कि सीएसवी एक समारोह नहीं है। सीएसवी एक वस्तु है और इसका खुलासा कार्य csv.generate, csv.parse, csv.transform, csv.stringify; तो इन कार्यों में से किसी एक का उपयोग केवल ... – balaphp

उत्तर

7

क्यू ntas 94 भारी, संकेत के लिए धन्यवाद।

12 महीने पहले, नोड-सीएसवी संस्करण 0.2 पर था, लेकिन अब यह 0.4 पर है और एपीआई बदल गया है।

// part of file market-script.js 
// edited by Jeff Moye (Moyesoft) 
// no attribution in the original file 

var csv2console = function(csvfile, headers) { 
    console.log(headers.join("\t")); 
    var parser = csv.parse(); //create the parser                            

    parser.on('readable', function(){ //the 'record' event no longer exists                     
             // so instead we write a handler for the                    
             // 'readable' event                          
    while(record = parser.read()){  // and read() each record in a loop                             
     var shares = Math.round(marketCapFloat(record[2])/record[3], 0); 
     var eps = (record[3]/record[4]).toFixed(3); 
     var earnings = accounting.formatMoney(eps * shares); 
     outrow = record.concat([shares, eps, earnings]); 
     console.log(outrow.join("\t")); 
    } 
    }); 

    parser.on('error', function(err){ // we may as well have an error handler                     
    console.log(err.message); 
    }); 

    fs.createReadStream(csvfile).pipe(parser); //open file as a stream and pipe it to the parser                
}; 
+1

धन्यवाद! मैंने खुद को कभी नहीं सोचा होगा। – Mike

+0

मुझे अंतिम समस्या के बाद लिख रहा है मैं इसे कैसे हल करूं? – mithra

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