मुझे नीचे दिखाए गए कोड को चलाने में त्रुटि क्यों मिलती है? (यह 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
मॉड्यूल सीएसवी सही ढंग से स्थापित किया गया है:
इस प्रकार मैं अब सीएसवी-सांत्वना समारोह में लिखा है? आप किस संस्करण का उपयोग कर रहे हैं और आप कहां उपयोग कर रहे हैं? क्या आपने इसे इस्तेमाल करने से पहले सीएसवी var लॉगिंग करने का प्रयास किया है? – matteospampani
क्या आप वाकई सही संस्करण का उपयोग कर रहे हैं? वर्तमान संस्करण का एपीआई आपके कोड के अनुसार अलग दिखता है। –
मुझे लगता है कि सीएसवी एक समारोह नहीं है। सीएसवी एक वस्तु है और इसका खुलासा कार्य csv.generate, csv.parse, csv.transform, csv.stringify; तो इन कार्यों में से किसी एक का उपयोग केवल ... – balaphp