2017-04-26 4 views
0

私はメインページ( 'GET /'のときレンダリングされたビュー)を作成しようとしています。/')' routes 'は、データベースをチェックするコントローラから関数を呼び出し、その値がすでにデータベース上にある場合は、メインページにエラーメッセージが表示されます。レンダリングされた 'view'とコントローラの間のSails.jsインタラクション

これはできますか?

私が使用した唯一の方法は、クエリの結果に応じて 'res.redirect()'または 'res.view()'を使用する方法ですが、メインをレンダリングしないようにしていますもう一度ページを開いたり、URLを変更したりしないでください。

ありがとうございます。

編集1:しようと@Royalist答え
編集2:jQueryのビットを学び始め、
編集3は、いくつかのものに変更:それは何をすべきかを、コントローラがやっているの
編集4:今はすべて動作します!

経路

'GET /thing': { 
controller: 'ThingController', 
action: 'getThing' 
}, 
'POST /thing': { 
controller: 'ThingController', 
action: 'postThing' 
}, 

コントローラ

getThing: function (req, res) { 
    res.view('thing'); 
}, 

postThing: function (req, res) { 
    console.log('Inside postThing'); 
    Thing.findOne({name: req.param('name')}).exec(function (err, thing) { 
     if (err) { 
      return res.json({status: 3});/* Some nasty error */ 
     } 
     if (!thing) { 
      Thing.create({name: req.param('name')}).exec(function (err, createdThing) { 
       if (err) { 
        console.log('Wrong data'); 
        return res.json({status: 2});/* The data is not correct */ 
       } 
       console.log('Everything ok'); 
       return res.json({status: 0});/* Created succesfully */ 
      }); 
     } 
     if (thing) { 
      console.log('Already exists'); 
      return res.json({status: 1});/* The thing already exists */ 
     } 
    }); 
} 

図今

<head> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
    <script> 
    function postThing(){ 
     $.ajax({ 
     url: '/thing', 
     method: 'POST', 
     data: {name: $("#name").val()}, 
     success: function(res) { 
      switch (res.status){ 
      case 0: { 
       console.log('Created succesfully!'); 
       break; 
      } 
      case 1: { 
       console.log('This thing already exists'); 
       break; 
      } 
      case 2: { 
       console.log('What you are trying to insert is wrong'); 
       break; 
      } 
      case 3: { 
       console.log('Boooom'); 
       break; 
      } 
      } 
     } 
     }); 
    } 
    </script> 
</head> 
<body> 
    <form action="Javascript:postThing();" method="POST" id="form"> 
    <input type="text" name="name" id="name" /> 
    <button>Submit</button> 
    </form> 
</body> 

すべて正常に動作します。
私が抱いている唯一の懸念はセキュリティと関係しています。投稿にajaxを使用するのが安全かどうかはわかりません。

答えて

1

はい、できます。

送信時にフォームでJavascriptメソッドをトリガーさせてください。 jQueryのは、うまくやるだろう。

$.ajax({ 
    type: "POST", 
    url: 'your/api/route/', 
    data: { 
     value: 'to server' 
    }, 
    success: function(response) { 
     /* Handle Response */ 
    } 
}); 

その後、あなたはPOST扱うだけでなく、jQueryのか、AJAXをサポートする他のJavaScriptライブラリが含まれるsetup the routeにする必要があります。最後に、ルートに関連付けられた方法で、データベース上で必要なアクションを実行します。

+0

私はそれをajaxを使って動作させることができましたが、このメソッドのセキュリティについては少し気になりました。 – Devgom

+0

私は暗号化されていないメッセージも心配しています。 SailsにHTTPリクエストをHTTPSリクエストにするポリシーを実装する方法があります。に見て良い。 – Royalist

関連する問題