Добавить действие сценария для кнопок в HTML с Vapor
Я занимаюсь разработкой веб-приложения на Swift 4 и Vapor 2.0. У меня есть метод для POST
запрос, который создает нового пользователя:
builder.post("user", "createUser") { (request) -> ResponseRepresentable in
Но я не знаю, как добавить действие для кнопки в .leaf
файл для вызова createUser
метод. Легко добавить действие JavaScript в .html
файл, вот так <script src="js/index.js"></script>
, Но с Vapor я не видел упоминаний об этом в документах Vapor 2.0.
Обновить:
С помощью @Caleb Kleveter, теперь это работает. Я обновил html
страница (это только для теста, так что это не очень хорошая страница) с надеждой: это поможет новичку, который сталкивается с той же проблемой при использовании vapor
,
Вот мое содержание HTML:
<!DOCTYPE html>
<html >
<head>
<meta charset="UTF-8">
<title>Responsive Login Form</title>
<link rel='stylesheet prefetch' href='http://ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/themes/smoothness/jquery-ui.css'>
<link rel="stylesheet" href="styles/app.css">
</head>
<body>
<link href='https://fonts.googleapis.com/css?family=Ubuntu:500' rel='stylesheet' type='text/css'>
<h3>
<form action="/user/createUser" method="POST" class="login-form">
<label for="username">Username:</label>
<input type="text" placeholder="Username" name="username"/>
<label for="password">Password:</label>
<input type="password" placeholder="Password" name="password"/>
<input type="submit" value="Login" class="login-button"/>
<form>
</h3>
<a class="sign-up">Sign Up!</a>
<br>
<h6 class="no-access">Can't access your account?</h6>
</div>
</div>
<!-- <div class="error-page">
<div class="try-again">Error: Try again?</div>
</div> -->
<script src='http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
<script src='http://ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/jquery-ui.min.js'></script>
<script src="js/index.js"></script>
</body>
</html>
1 ответ
Скрипты могут быть добавлены в .leaf
файл так же, как в HTML, просто добавьте тег script:
<script src="js/index.js"></script>
От просмотра вашего кода, что вы хотите, это form
разместить данные на сервере. Вы должны заменить свой .login-form
div
с form
элемент:
<form action="/create-user" method="POST" class="login-form">
<label for="username">Username:</label>
<input type="text" placeholder="Username" name="username"/>
<label for="password">Password:</label>
<input type="password" placeholder="Password" name="password"/>
<input type="submit" value="Login" class="login-button"/>
<form>
<a class="sign-up">Sign Up!</a>
<h6 class="no-access">Can't access your account?</h6>
Вот документация для форм HTML.
Тогда вы сможете получить доступ к данным формы в вашем методе маршрута с request.body
:
func createUser(req: Request) throws -> ResponseRepresentable {
guard let password = req.body["password"]?.string,
let username = req.body["username"]?.string else {
throw Abort.badRequest
}
// The rest of your code goes here
}
Я не уверен, что это сработает, я не проверял, но я думаю, что вы поняли идею.