私はメインページ( '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を使用するのが安全かどうかはわかりません。
私はそれをajaxを使って動作させることができましたが、このメソッドのセキュリティについては少し気になりました。 – Devgom
私は暗号化されていないメッセージも心配しています。 SailsにHTTPリクエストをHTTPSリクエストにするポリシーを実装する方法があります。に見て良い。 – Royalist