Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js (Node js)-TypeError:无法调用方法';getData';未定义的_Node.js_Express_Typeerror - Fatal编程技术网

Node.js (Node js)-TypeError:无法调用方法';getData';未定义的

Node.js (Node js)-TypeError:无法调用方法';getData';未定义的,node.js,express,typeerror,Node.js,Express,Typeerror,我已经找了几天了,真的我觉得我错过了这个概念的一部分。。。我是node.js的新手,我正在尝试从我的主类中的不同模块调用一个方法 这是密码 inputReader.js (function() { var dir = './views/'; // Declare the directory to be scanned var data = {} // Create array object for storage fs.readdir(dir, fun

我已经找了几天了,真的我觉得我错过了这个概念的一部分。。。我是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页面将显示我指定应用程序读取的文件夹中的文件内容/视图/。。但很明显,我做了一些非常错误的事情,因为我得到的错误是:

TypeError:无法在pass(c:\Users\Brian\documents\visualizer\app.js:21:24)调用参数(c:\Users\Brian\documents\visualizer\node\u modules\express\lib\router\index.js:164:37)处未定义的方法“getData”(c:\Users\Brian\documents\visualizer\node\u modules\express\lib\router\index.js:138:11)(c:\Users\Brian\documents\visualizer\node\u modules\express\lib\router\index.js:145:5)在路由器上。下一步在Object.router(c:\Users\Brian\documents\visualizer\node\u modules\express\lib\router\index.js:33:10)上调度(c:\Users\Brian\documents\visualizer\router\index.js:173:5)(c:\Users\Brian\documents\visualizer\node\u modules\express\node\u modules\connect\lib\proto.js:193:15)在Object.expressInit[作为句柄](c:\Users\Brian\documents\visualizer\node\u modules\express\node\proto.js:193:15)在Object.query(c:\Users\Brian\documents\documents\documents\visualizer\visualizer\node\proto.js:30:5)[作为句柄](c:\Users\Brian\documents\visualizer\node\u modules\express\node\u modules\connect\lib\middleware\query.js:44:5)

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


谢谢!(很抱歉读了这么久。)

有几种不同的书写方式:

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

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


请尝试var inputReader=require('./inputReader')(不带附加的.inputReader)。这不能解释您的错误,但我不理解
返回数据();
行。
数据
是一个对象,而不是函数。
// 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();