【问题标题】:(Node js) - TypeError: Cannot call method 'getData' of undefined(Node js)-TypeError:无法调用未定义的方法“getData”
【发布时间】:2013-11-10 11:48:42
【问题描述】:

我已经环顾了几天了,真的我觉得我在这里错过了这个概念的一部分......我对 node.js 还很陌生,我正在尝试调用每次说来自我的主类中不同模块的方法...

这是代码..

inputReader.js

    (function() {
    var dir = './views/';   // Declare the directory to be scanned
    var data = {}   // Create array object for storage 

    fs.readdir(dir, function(err, files) {
        if (err) {
            throw err;
        }
        var c = 0;  // Declare a var c = 0; initial condition of a for loop
        files.forEach(function(file) {
            c++;    // Increment a counter in the for-loop condition
            fs.readFile(dir+file, 'utf-8', function(err, string) {
                if (err) {
                    throw err;
                }
                if ( 0 === -3) {
                    data[file] = string;    // Throws into data object string of contents within the file being read
                    console.log(data);  // We only need this to test using console (the contents being stored)
                }
            });
        });
    }); 
    module.exports.getData = function() {
        return data();
    }
}());

这就是我尝试在 app.js 中调用它的方式

    var inputReader = require('./inputReader').inputReader;

app.get('/', function(req, res){
  res.send(inputReader.getData());
});

app.listen(3000);
console.log('Listening on port 3000');

我的预测是,如果我这样做正确,我的 localhost 页面将显示我指定应用程序读取的文件夹中的文件内容; ./views/.. 但很明显,我做错了什么,因为我得到的错误是:

TypeError:无法在回调中调用 c:\Users\Brian\documents\visualizer\app.js:21:24 处未定义的方法 'getData' (c:\Users\Brian\documents\visualizer\node_modules\express\ lib\router\index.js:164:37) 在参数 (c:\Users\Brian\documents\visualizer\node_modules\express\lib\router\index.js:138:11) 在传递 (c:\Users\ Brian\documents\visualizer\node_modules\express\lib\router\index.js:145:5) 在 Router._dispatch (c:\Users\Brian\documents\visualizer\node_modules\express\lib\router\index.js: 173:5) 在 Object.router (c:\Users\Brian\documents\visualizer\node_modules\express\lib\router\index.js:33:10) 在下一个 (c:\Users\Brian\documents\visualizer\ node_modules\express\node_modules\connect\lib\proto.js:193:15) 在 Object.expressInit [作为句柄] (c:\Users\Brian\documents\visualizer\node_modules\express\lib\middleware.js:30: 5) 在下一个 (c:\Users\Brian\documents\visualizer\node_modules\express\node_modules\connect\lib\proto.js:193:15) 在 Object.query [作为句柄] (c:\Users\Brian\文档\可视化器\n ode_modules\express\node_modules\connect\lib\middleware\query.js:44:5)

如果有人能指出我正确的方向或向我解释我做错了什么,那将不胜感激

谢谢! (抱歉读了这么久……)

【问题讨论】:

  • 试试 var inputReader = require('./inputReader') (没有额外的 .inputReader)。
  • 它不会解释你的错误,但我不明白return data(); 行。 data 是一个对象,而不是一个函数。

标签: node.js express typeerror


【解决方案1】:

几种不同的写法:

// inputReader.js
module.exports.getData = function() {
    return data();
}

// app.js
var inputReader = require('./inputReader'); // inputReader contains getData
inputReader.getData();

// inputReader.js
module.exports.getData = function() {
    return data();
}

// app.js
var inputReader = require('./inputReader').getData; // inputReader is now getData
inputReader();

// inputReader.js
var theModule = {
    getData : function() {
        return data();
    }
}

module.exports = theModule;

// app.js
var inputReader = require('./inputReader');
inputReader.getData();

// inputReader.js
var theModule = function() { /* constructor */ };

theModule.prototype.getData = function() {
    return data();
};

module.exports = theModule;

// app.js
var inputReader = require('./inputReader');
new inputReader().getData();

【讨论】:

    猜你喜欢
    • 2011-06-04
    • 2014-05-28
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多