[解決済み] joiライブラリを使用して2つの時間を比較する方法
2022-01-28 19:01:23
質問事項
回フィールドが2つあります。joiライブラリを使用してバリデーションを適用する必要があります。 現在、私は検証を適用していますが、次のようなエラーが表示されます。 TypeError: joi.string(...).required(...).less is not a function. 検証は、計画された開始時刻は計画された終了時刻より小さくなければなりません。! 以下のコードを実行しました。
{
schema=joi.object({
taskname:joi.string().required().label('Please enter Task Description!'),
task:joi.string().invalid(' ').required().label('Please enter Task Description!'),
taskn:joi.string().min(1).max(80).required().label(' Task Description too long.'),
projectname:joi.string().required().label('Please select Project !'),
type:joi.string().required().label('Please select Task Type !'),
status:joi.string().invalid('None').required().label('Please choose Status'),
plannedstarttime:joi.string().regex(/^([0-9]{2})\:([0-9]{2})$/).required().label('Please fill Planned Start Time !'),
plannedendtime:joi.string().regex(/^([0-9]{2})\:([0-9]{2})$/).required().label('Please fill Planned
End Time !'),
plantime:joi.string().required().less(joi.ref('plannedendtime')).label('Planned Start time should
be less than Planned End time. !'),
})
result=schema.validate({taskname:taskname,task:taskname,taskn:taskname,type:tasktype,projectname:projectname,status:request.body.status,plannedstarttime:plannedstarttime,plannedendtime:plannedendtime,plantime:plannedstarttime});
}
このバリデーションを実現するにはどうしたらよいですか?
どのように解決するのですか?
正しい型を使っていることを確認する必要があります。
string
を定義していません。
less
メソッドがないので、エラーになります。
を削除することができます。
plantime
を提供し
カスタムバリデーション関数
を実装しています。
文字列比較
:
schema = joi.object({
...
// plantime: // <-- remove it
...
}).custom((doc, helpers) => {
if (doc.plannedstarttime > doc.plannedendtime) {
throw new Error("Planned Start time should be lower than Planned End time!");
}
return doc; // Return the value unchanged
});
もう1つの選択肢として考えられるのは
date
という型があります(ちなみに、時間だけでなく、日付も知る必要はないのでしょうか?)
schema = joi.object({
...
plannedstarttime: joi.date().required() ...
plannedendtime: joi.date().required().greater(joi.ref('plannedstarttime')) ...
// plantime // <-- remove it
...
});
次に
plannedstarttime
と
plannedendtime
をある方法で使用します。
format
. このフォーマットは
moment.jsの書式
. 例えば、時+分だけを表示するフォーマットは、次のようになります。
HH:mm
.
関連
-
[解決済み] E: npm パッケージを見つけることができません。
-
[解決済み] nodejs - http.requestでresponse.writeを使用する場合、第一引数は文字列またはBufferでなければなりません。
-
[解決済み] nvm は npm config の "prefix" オプションと互換性がありません。
-
[解決済み] Node.jsのnpmモジュールをアンインストールするにはどうすればよいですか?
-
[解決済み] Node.js の console.log() で '[Object]' ではなく、完全なオブジェクトを取得するにはどうすればよいですか?
-
[解決済み] Node.jsを使用してディレクトリが存在しない場合に作成する方法
-
[解決済み] NVMを使用して、デフォルトのノードバージョンを設定するにはどうすればよいですか?
-
[解決済み] Node.jsで "Cannot find module "エラーを解決するにはどうしたらいいですか?
-
[解決済み] node.jsでJSONをpretty-printするにはどうしたらいいですか?
-
[解決済み】Node.jsでBase64エンコードを行うにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラーです。EACCES: 権限が拒否されました、アクセス '/usr/local/lib/node_modules' 。
-
[解決済み] 非推奨パッケージに関するNPM警告メッセージ
-
[解決済み】npx コマンドが見つかりません。
-
[解決済み】NPMインストールエラー:解析中の予期せぬJSON入力の終了 '...nt-webpack-plugin": "0'' 付近。
-
[解決済み] Expectアサーションの型エラー -> expect(...).toExistは関数ではない
-
[解決済み] MongoDB でコレクションを日付順に並べるには?
-
[解決済み] NPMが同じエラーで固まる EISDIR: ディレクトリに対する不正な操作、エラーで読み込み (ネイティブ)
-
[解決済み] Express.js req.bodyが未定義です。
-
[解決済み] "app.use(express.cookieSession())" に "secret" オプションが必要です。
-
[解決済み] Mongoose Schema がモデルとして登録されていません。