1

我已经环顾了几天,真的我觉得我在这里错过了这个概念的一部分......我对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');

我的预测是如果我这样做正确,我的本地主机页面将显示我指定应用程序读取的文件夹中的文件内容;./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\documents\visualizer\node_modules\express \node_modules\connect\lib\middleware\query.js:44:5)

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

谢谢!(很抱歉读了很久......)

4

1 回答 1

2

几种不同的写法:

// 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();
于 2013-10-30T18:08:59.863 回答