我正在尝试在项目中使用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();
最佳答案
您需要module.exports = new Generator()
。按照现在的写法,您需要:
var generator = require('./generator');
generator.Generator.generatePhrases(1);
因为
exports.Generator = new Generator();
表示:“当我需要此模块时,我需要一个具有名为 Generator
的属性的对象;该属性是 Generator 的实例,并且具有 generatePhrases
方法。 ”
看看my screencast on modules如果您需要有关 module.exports
工作原理的更多说明。
关于node.js - 在nodejs中包含对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12206638/