[英]Node.js / Inheritance of variables and modules
我在node.js中繼承有麻煩。 我有以下代碼:
Main.js相關代碼:
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;
s3.js相關代碼:
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 is not defined
。 這是我在server.js代碼中定義了logger變量的事實。 idx
變量idx
發生類似的問題。
如何在node.js中定義變量和模塊繼承(如Java中的保護)?
如何在node.js中定義變量和模塊繼承(如Java中的保護)?
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
對象分配這些變量作為屬性。
也許是這樣的(我無法測試,所以可能需要做一些調整)
var server = function(){
this.idx = 0;
this.winston = require('winston');
this.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
var serverObj = require('./server');
var server = serverObj.server;
var logger = serverObj.logger;
但是,我建議將記錄器相關的代碼移到它自己的文件中,以便分開關注點 。
var server = require('./server');
var logger = require('./logger');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.