語境:節點請求/連接特定的變量
我試圖鏈接日誌條目與這些項的生成相關的請求。我喜歡bunyan的child
記錄器的概念,它允許我將一個請求ID附加到子記錄器所做的任何後續記錄中。我希望這個記錄器被用在其他模塊中,所以我require
帶有getter的文件來獲取子記錄器。這允許以其它方式分離的事件如getting widgets
被鏈接到導致該條目中的請求
人爲的例子:
index.js
var widget = require('./widget');
var logging = require('./logging');
//...
app.use('*', function(req, res, next) {
var logger = logging.getLogger();
var child = logger.child({requestId: req.id}); //req.id set in earlier middleware
logging.setLogger(child);
};
app.get('/widgets', function(req, res, next) {
res.json(widgets.getAll());
};
//...
widget.js
var logging = require('./logging');
//...
exports = module.exports = {
getAll: function() {
logging.getLogger().info("getting widgets");
return widgets;
}
}
與此問題狀態是在請求(單例?)之間共享的,所以如果兩個請求幾乎是模擬的同樣,「獲取小部件」日誌條目將requestId
屬性設置爲第二個請求的ID。
的問題是:
有一種方法爲具有變量,其範圍被附接到該請求,而無需注入並圍繞req
對象傳遞(例如new widget()
和/或widget.setRequest(req)
)或實例化作爲注入logging
對象?像這樣將對象傳遞到其他模塊感覺就像違反了關注的分離
換言之,共享請求的狀態而不是跨請求實現我想實現的目的的最佳方式是什麼?
'logging.setLogger(logging.getLogger()'...我的眼睛我從來沒有在xx –
@PatrickRoberts之前看過如此詳細的node.js,這只是一個非常有意思的例子,只是爲了得到這個觀點。推薦?會有更多的幫助嗎? – rwilson04
我找不到任何引用' req.id'。從哪裏來? –