Javascript Node.js/变量和模块的继承
我在node.js中遇到继承问题。我有以下代码: Main.js relavnt代码:Javascript Node.js/变量和模块的继承,javascript,node.js,inheritance,Javascript,Node.js,Inheritance,我在node.js中遇到继承问题。我有以下代码: Main.js relavnt代码: var s3_prototype_require = require("./s3") var s3_prototype = new s3_prototype_require(); function getDoc(file) { s3_prototype.read(file, function(err) { return_result(res, err);
var s3_prototype_require = require("./s3")
var s3_prototype = new s3_prototype_require();
function getDoc(file) {
s3_prototype.read(file, function(err) {
return_result(res, err);
})
}
服务器,js相关代码:
var server = function(){};
var idx = 0;
var winston = require('winston')
var logger = new(winston.Logger)({
transports: [
new(winston.transports.File)({
stream: fs.createWriteStream(log_g, {
flags: 'a'
}),
options: {
highWaterMark: 32
}
})
]
});
module.exports = server;
var server= require('./server'),
util = require('util');
var s3 = function() {
this.s3 = 's3';
};
util.inherits(server, s3);
s3.prototype.read = function(file, callBack) {
logger.info("Read file...");
idx = idx + 1;
}
s3.js相关代码:
var server = function(){};
var idx = 0;
var winston = require('winston')
var logger = new(winston.Logger)({
transports: [
new(winston.transports.File)({
stream: fs.createWriteStream(log_g, {
flags: 'a'
}),
options: {
highWaterMark: 32
}
})
]
});
module.exports = server;
var server= require('./server'),
util = require('util');
var s3 = function() {
this.s3 = 's3';
};
util.inherits(server, s3);
s3.prototype.read = function(file, callBack) {
logger.info("Read file...");
idx = idx + 1;
}
问题是我在以下错误上失败:ReferenceError:logger未定义
。这是我在server.js代码中定义了logger变量的事实。类似的问题也发生在idx
变量上
如何在node.js中定义变量和模块继承(如Java中的protected)
如何在node.js中定义变量和模块继承(如Java中的protected)
JavaScript中的对象与Java等语言中的传统对象略有不同。对象不能真正具有受保护的值,但可以通过利用来实现继承。针对您的特殊问题,您只需要定义带有相应属性的server
变量,以便在创建对象实例时初始化它们
问题在于您的server.js
。您可以在该文件中本地定义logger
,以及一些其他变量,但只导出与这些其他变量无关的server
变量
// You're only exporting this function
var server = function(){};
// These are not being exported and just live within this file.
var idx = 0;
var winston = require('winston')
var logger = new(winston.Logger)({
transports: [
new(winston.transports.File)({
stream: fs.createWriteStream(log_g, {
flags: 'a'
}),
options: {
highWaterMark: 32
}
})
]
});
module.exports = server;
若要解决此问题,请尝试将服务器
对象中的这些变量指定为属性
可能是这样的(我无法测试它,因此可能需要进行一些调整)
简单的解决方案是导出一个对象 server.js
module.exports = {
server: server,
logger: logger
};
s3.js
但是,为了方便起见,我建议将与记录器相关的代码移动到它自己的文件中
这不是节点模块的工作方式。唯一存在的值是分配给
模块的值。导出
。其他模块中没有定义这些变量。谢谢。idx变量呢?如何导出它,使它对所有类都通用?@中间件您可以为idx导出setter和getter
var server = require('./server');
var logger = require('./logger');