2017-07-20 10 views
0

私はポート番号を格納しているmongooseスキーマを持っています。私はまた、フィールドに設定されているデフォルト値を持っています。MongooseはNumberフィールドにnullを受け入れます。

​​

私のAPIから値が得られない場合は、1234に設定されます。 ただし、誰かがnullを送信した場合は、nullを受け取り、データベースに保存します。

null1234に変換しないでください。 nullは数字ではありません!それを間違って理解していますか?

私はhere与えられた解決策を検討していますが、私は(私が間違っているとその1234nullを変換することになっていない限り)それなしで動作するはずです何かのために余分なコードを追加したいいけない

+1

:あるいはundefined一切(明示的な)はありませんでしたnull値を追加します。 /ヌル)は、マングースの "型"の基礎が基づいています。だから、単純なバリデーター(単純なバリデータで行うことができます)を投げたり、 "デフォルト"の値で 'null 'を置き換えることで生きることができるかどうかは、あなたが言及しているように" pre "フックで行われます。代わりに、入力が 'null'の代わりに' undefined'であることを確認し、 'default'が期待どおりに動作するようにしてください。 –

+0

下記の[私の答え](https://stackoverflow.com/questions/45208127/mongoose-accepts-null-for-number-field/45211501#45211501)は役に立ちましたか?コメントはありますか? – rsp

答えて

0

はコメントを参照してください。この問題では:

nullは有効な値でありますrequiredを指定していない限り、Dateプロパティを返します。デフォルトは、その値が未定義の場合のみセットされ、偽の場合はセットされません。

(日付についてですが、数値にも適用できます))

あなたのオプションのいずれかにある:

  • それは
  • 使用フック/ミドルウェア発行し

を修正するために拒否し、カスタムバリデータを追加するフィールド

  • requiredを追加次のように、保存前または検証後(またはその他の)のフックを取得することがあります。

    YourCollection.pre('save', function (next) { 
        if (this.port === null) { 
        this.port = undefined; 
        } 
        next(); 
    }); 
    

    おそらくあなたは、のようなものを使用する必要があります:

    YourCollection.pre('save', function (next) { 
        if (this.port === null) { 
        this.port = 1234; // get it from the schema object instead of hardcoding 
        } 
        next(); 
    }); 
    

    参照関数呼び出しにnullトリガーのデフォルト値を作成する方法についていくつかのトリックのためにもこの答え:

    モンゴースはnullをとするように設定することはできません、それはあなたがJSONなどの要求に得たデータを扱う場合は時々あるとので、それは時々nullにundefinedを変換することができます(いくつかの「-nullでない」パラメータまたはそのような何かを持つ):

    > JSON.parse(JSON.stringify([ undefined ])); 
    [ null ] 
    

    をこれは、[JavaScriptのアーティファクト](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objectsのより多くのです

    > JSON.parse(JSON.stringify([ 1,,2 ])); 
    [ 1, null, 2 ] 
    
  • 関連する問題