メニューアイテムの名前とそのアイテムの価格を取り、そのデータをデータベースに格納する単純なフォームがあります。私のサーバー、私のセットアップ名前はメニュー上の別の名前と同じである場合、プログラムは、メニュー項目に追加されたルートでは、それは次のようにres.json()
を経由してエラーとして吐き出す:今クライアントサイドフォームを使用した角型のサーバ側の検証
if (newItem) {
//Add the item to the db
}
else {
// the item has the same name as another item on the menu
res.json("{\"Error\" : \"Menu Item already exists!\"}");
}
エラーオブジェクトがサーバーからクライアントに返されたときに、フォームにエラーを表示します。私は自分のフォームと私のフォームにエラーをセットアップしましたが、同様の項目名が与えられたときに、正しく切り替えることができません。
これは私の形式です:サーバがエラーオブジェクトを送信するとき
<form role="form" name="addMenuItem">
<div layout="row">
<md-input-container class="md-block" flex-gt-xs="">
<label>Item Name</label>
<input name="item_name" ng-model="formData.item_name" ng-minlength="1" ng-required="true" size="30">
<div ng-messages="addMenuItem.item_name.$error">
<div ng-message="required">Item name is required</div>
</div>
<div ng-messages="addMenuItem.item_name.$error.exists">
<div ng-message="required">Item name exists</div>
</div>
</md-input-container>
//other form components
だから、私が表示されるまでメッセージaddMenuItem.item_name.$error.exists
を切り替えたいと私はそれを切り替えるには、これを書いたが、それはかなりの作業ではありません。
$http.post('/addMenuItem', $scope.formData)
.then(function (data) {
const resJson = JSON.parse(data.data);
"Error" in resJson ? console.log("Error") : console.log("No err");
console.log(resJson.hasOwnProperty('Error'));
if(resJson.hasOwnProperty('Error')) {
$scope.addMenuItem[item_name].$setValidity('exists'); // error thrown on this line
}
else {
//add to db
}
});
私はそのコードを実行すると、クロムDevのコンソールは、このエラーに串:
ReferenceError: item_name is not defined
私はデコードできるものから何らかの理由で自分のフォーム(または具体的にはitem_name
の入力)を見つけることができないように見えますが、なぜそれを理解できません。私は、HTMLに書いたエラーを簡単に切り替えることができると思いますよね?
$scope.addMenuItem["item_name"].$setValidity('exists');
で
コンソールのエラーを取り除きましたが、エラーはフォームに表示されず、もうアイデアは得られましたか? – rakeshdas