1

プロジェクトでnodejsを使用しようとしていますが、オブジェクトを含むファイルを含める必要があります。単なる包含は機能しませんでした。調べてみたところ、ファイルをモジュールに変換する必要があることがわかりました。そこから、「var generator = require('./generator.js');」という行を追加しました。「app.js」および「exports.Generator=new Generator();」ファイルに含まれていますが、このエラーが発生しました:

D:\Users\Miguel Borges\Dropbox\Trabalhos\Lero Lero\nodejs\app.js:14
        var phrase = generator.generatePhrases(1);
                               ^ 
TypeError: Object #<Object> has no method 'generatePhrases'
    at Server.<anonymous> (D:\Users\Miguel Borges\Dropbox\Trabalhos\Lero Lero\nodejs\app.js:14:25)
    at Server.EventEmitter.emit (events.js:91:17)
    at HTTPParser.parser.onIncoming (http.js:1783:12)
    at HTTPParser.parserOnHeadersComplete [as onHeadersComplete] (http.js:111:23)
    at Socket.socket.ondata (http.js:1680:22)
    at TCP.onread (net.js:410:27)

編集

さて、@ Brandon Tilleyの答えで、エラーは次のようになります。

D:\Users\Miguel Borges\Dropbox\Trabalhos\Lero Lero\nodejs\app.js:20
console.log(g.Generator.generatePhrases(1));
                        ^
TypeError: Cannot call method 'generatePhrases' of undefined
    at Object.<anonymous> (D:\Users\Miguel Borges\Dropbox\Trabalhos\Lero Lero\nodejs\app.js:20:25)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.runMain (module.js:492:10)
    at process.startup.processNextTick.process._tickCallback (node.js:244:9)

app.js

var uri = '127.0.0.1';
var port = 8001;

var http = require('http');
var url = require('url');
var g = require('./generator.js');

http.createServer(function (request, response) {
    response.writeHead(200, {'Content-Type': 'text/plain'});

    var path = url.parse(request.url).pathname;
//  var generator = new g.Generator();

    var phrase = g.Generator.generatePhrases(1);

    response.end(path + '\n' + phrase);
}).listen(port, uri);

console.log('Server running at http://' + uri + ':' + port + '/');
console.log(g.Generator.generatePhrases(1));

generator.js

function Generator () {

}

Generator.prototype.generatePhrases = function(nrPhrases) {
    return 'hi ' + nrPhrases;
};

// exports.Generator = new Generator();
4

1 に答える 1

2

あなたが欲しいmodule.exports = new Generator()。今の書き方では、次のものが必要です。

var generator = require('./generator');
generator.Generator.generatePhrases(1);

なぜなら

exports.Generator = new Generator();

「このモジュールが必要な場合は、Generator;というプロパティを持つオブジェクトが必要です。そのプロパティはGeneratorのインスタンスであり、generatePhrasesメソッドがあります。」

動作についてさらに説明が必要な場合は、モジュールに関する私のスクリーンキャストをmodule.exportsご覧ください。

于 2012-08-30T22:46:29.177 に答える