リクエストの特定のパラメータを記録してオンラインで確認できるページに出力するモジュールを作成しようとしていますが、このページではsocket.io
を使用して最新のログ。NodeJSの次のイベントハンドラにリクエストを送信
そして、私はこのモジュールをプラグインとして機能させて、このモジュールを呼び出して初期化してから、追加のエントリポイント/_logger
があなたのアプリケーションに追加され、一度そのページにアクセスすれば最新のログがリアルタイムで更新されます。だから、モジュールは、要求をインターセプトする必要があります。
function setup(httpServer) {
//page
httpServer.on("request", function (request, response) {
var pathname = url.parse(request.url).pathname;
if (pathname === '/_logger') {
fs.readFile(__dirname + '/logger.html', (err, data) => {
response.writeHead(200, { 'Content-Type': 'text/html' });
response.write(data);
response.end();
});
}else{
// how to give up the control for this requset
}
});
var io = require('socket.io')(httpServer);
io.on('connection', function (socket) {
//TO BE DONE
socket.on('event', function (data) { });
socket.on('disconnect', function() { });
});
}
module.exports = {
setup: setup
}
使用法:
var logger= require("./logger/index");
var server = require('http').createServer();
logger.setup(server);
server.on("request", function(req,res){
//Normal logic for different application
});
server.listen(3333);
今の問題は、要求されたURLが/_logger
ではないと、私はこの要求の制御を解放すべきであるということです。
if (pathname === '/_logger') {
//take control
}else{
// Nothing should be done here, it should go to the next request chain.
}
文書を読み終えたら、正しい方法を見つけることができません。
アイデア?
私は恐れては、 'logger'モジュールが別々のプラグインとして動作するはずないです。つまり、 'logger'モジュールはun-invasionでなければなりません。 – hguser
@hguser 'logger.setup(server)'を使う代わりに、以下のようにロガーモジュールからハンドラーをエクスポートすることができます: 'var logH = logger.handler; server.on( 'request'、compose([logH、otherHandler])) '; – zeronone
@hguser 'wrapHandler'関数を使うと、単純なハンドラと特定のパスを束縛することができます。 – zeronone