Добавить действие скрипта для кнопок в 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>

person lee    schedule 27.09.2017    source источник


Ответы (1)


Скрипты могут быть добавлены в .leaf файл так же, как и в HTML, просто добавьте тег скрипта:

<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
}

Я не уверен, что это сработает, я не тестировал, но думаю, вы поняли.

person Caleb Kleveter    schedule 28.09.2017