0

多くの苦労とグーグル検索の後、私はまだこれに取り組む方法を理解できません。助けが必要です...

出力:

    (node) warning: possible EventEmitter memory leak detected. 51 listeners added. Use emitter.setMaxListeners() to increase limit.
Trace
    at EventEmitter.addListener (events.js:160:15)
    at EventEmitter.once (events.js:179:8)
    at SkinCollection.open (/home/nitin/node_modules/mongoskin/lib/mongoskin/collection.js:108:20)
    at obj.(anonymous function) [as insert] (/home/nitin/node_modules/mongoskin/lib/mongoskin/utils.js:64:10)
    at insertErrorLog (/home/nitin/dev/aayush/errorLog.js:37:18)
    at Server.<anonymous> (/home/nitin/dev/aayush/errorLog.js:69:24)
    at Server.EventEmitter.emit (events.js:98:17)
    at HTTPParser.parser.onIncoming (http.js:2022:12)
    at HTTPParser.parserOnHeadersComplete [as onHeadersComplete] (http.js:119:23)
    at Socket.socket.ondata (http.js:1912:22)

CODE LINK:コードへのリンク

助けを求めて事前にthnax...

4

1 に答える 1

0

db.collection呼び出すたびに EventEmitter を作成するようです。リクエスト ハンドラの外部でコレクションをキャッシュしてみてください。

var logs = db.collection('logs');

var insertErrorLog = function (req, res) {
  var pathname = url.parse(req.url).pathname;
  var ua = req.headers['user-agent'];     // user-agent header from an HTTP request
  var details = parser.setUA(ua).getResult();
  var params = url.parse(req.url,true).query;

  logs.insert({…});

コードをざっと見てみると、常に同じインスタンスを返す必要があることがわかりますが、問題の他の理由はわかりません。

https://github.com/kissjs/node-mongoskin/blob/master/lib/mongoskin/db.js#L148

于 2013-09-17T13:05:52.207 に答える