2017-02-22 1 views
7

私たちは同じ永続層(クエリを含む共有モジュール)を共有しながら、mongooseを利用するいくつかのnodejsデーモンを持っています。これらのデーモンの一ダークマングースマジック: "findOneに無効な引数"

(常に同じ1)我々ランダムに(数回週)マングースから次のエラーを取得する:

マングース:findOneに無効な引数()

私たちはすべてのクエリをチェックして、どこから来るのかを知ることができませんでした。エラーコールスタックは毎回異なります(特定のマングースコールがこの問題の原因と思われる)ので、これはビジネスロジックに固有のものではないと思います。エラーが再度発生した場合には、我々は次のログを追加し、いくつかのデバッグを行うためには

log({ 
    // What mongoose checks (both false -> the error). 
    isInstanceOfMQuery: conds instanceof mquery, 
    isObject: mquery.utils.isObject(conds), 
    // Trying to find out what this value is. 
    conds, 
    toString: Object.prototype.toString.call(conds) 
    inspect: util.inspect(conds, { showHidden: true, depth: null, showProxy: true }) 
}) 

condsはマングースが文句を言っている引数です。 log()はすべてJSON.stringify()を行います。

これはこの呼び出し結果のログのいずれかです。

{ 
    "isInstanceOfMQuery": false, 
    "isObject": false, 
    "conds": {}, 
    "toString": "[object Null]" 
    "inspect": "{}", 
} 

さて、これは私にもさらに混乱...どのようcondsが同時に{}null可能!私が探している

回答:

  • にはどうすればcondsが含まれているオブジェクトのこの種を再現することができますか?
  • どのようにランダムに、そしてまれにしか起こらないバグを続行しますか?
  • どのような種類の価値があるのか​​、それがどこから来たのかを特定するために、さらにログインできますか?

+0

実行しているノードのバージョンは?私はこのことをノード7.4.0では無作為に見てきたが、6.9.2では無作為に見たので尋ねる。 – Brett

+0

Mongoose 4でノード7の不思議なヌルのクエリオブジェクトと関係があるように見える他のいくつかの本当に驚くべきものを見ましたが、再びノード6で観察しませんでした。 – Brett

+0

私たちは最新の7.xバージョン今かなりの時間です。私はしばらく前に、プッシュリクエストをして、それを使ってマングースを手に入れました。奇妙なことは、同じノードバージョンで実行している他のデーモンには、この問題がないことです。 -/ チップをありがとう! – patrickd

答えて

5

おそらくnode bugであり、PRでhereを修正しました。それはまだリリースに含まれていません。

ポインタとv8のガベージコレクションに依存するように見えるので、確実に再現できません。それが上流に固定されるのを待つだけだ。