node.js - 在nodejs中包含对象

标签 node.js

我正在尝试在项目中使用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/

相关文章:

javascript - 如何动态配置 Passportjs 策略?

node.js - 放大初始化错误 - ✖ 根堆栈创建失败初始化失败 TypeError : Cannot redefine property: default

node.js fs.rename() 错误提示

javascript - Node.js 代码仅在带有 Sequelize 的文件顶部工作

javascript - 如何从 response.body 获取 Node 中 '<img src=' '>' 的绝对路径

node.js - 错误: Cannot find module './build/Release/analytics.node'

javascript - Node.js Socket.io 页面刷新多个连接

angularjs - Grunt 在开发环境中美化或不丑化

json - 如何在 Node.js 代理中返回 JSON?

node.js - Gulp 未在我的 macOS 上成功运行