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\node_modules\express\lib\router) で c:\Users\Brian\documents\visualizer\app.js:21:24 で undefined のメソッド 'getData' を呼び出せません\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 に答える