Κοινή χρήση τεχνολογίας

vue3 Springboot mybatis mysql project πρακτική-υλοποίηση απλών λειτουργιών σύνδεσης και εγγραφής

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Εδώ είναι μια υλοποίηση έργου του vue3+springboot+mybatis+mysql, το οποίο απλώς υλοποιεί τις λειτουργίες σύνδεσης και εγγραφής διαχωρισμού front-end και back-end Τα κύρια εργαλεία είναι: idea, navicat

Πίνακας περιεχομένων

1. Δημιουργήστε το έργο vue3 και την αρχική διαμόρφωση

Δημιουργία έργου vue3

2. Τροποποιήστε τη δομή του έργου

1) Αρχική δομή καταλόγου

2) Τροποποιημένη δομή καταλόγου

​Επεξεργαστείτε και γράψτε τη σελίδα εγγραφής σύνδεσης

1)LoginAndRegister.vue

2) Home.vue

3) δρομολογητής

4) Login.css

5) Εμφάνιση σελίδας εγγραφής σύνδεσης

2. Δημιουργήστε έργο Springboot+mysql+mybatis και συνδεθείτε στη βάση δεδομένων

3. Γράψτε τις λειτουργίες σύνδεσης και εγγραφής back-end

1. Λογική σύνδεσης

2. Λογική εγγραφής

3. Τμήμα κώδικα υποστήριξης

4. Εκτελέστε το έργο


1. Δημιουργήστε το έργο vue3 και την αρχική διαμόρφωση

1. Δημιουργία έργου vue3

Για να δημιουργήσετε ένα έργο, μπορείτε να ανατρέξετε σε ένα από τα άρθρα μου:

Δημιουργήστε ένα προσαρμοσμένο έργο vue3 με το ιστολόγιο IDEA_idea vue3-CSDN

Αρχική δομή καταλόγου μετά τη δημιουργία:

2. Τροποποιήστε τη δομή του έργου

Πρώτα πρέπει να τροποποιήσετε την αρχική δομή καταλόγου

1) Αρχική δομή καταλόγου

περιουσιακά στοιχείαδημοσιεύστε φωτογραφίες

συστατικάΕνδιάμεσα εξαρτήματα, συνήθως επαναχρησιμοποιήσιμα

δρομολογητήείναι η διαδρομή στην οποία διαμορφώνονται οι διαδρομές αρχείων όλων των κύριων σελίδων

κατάστημαΧρησιμοποιείται γενικά για διαχείριση κατάστασης vuex, όπως αποθήκευση διακριτικών κ.λπ.

προβολέςΤο κέντρο είναι η κύρια σελίδα

App.vueΕίναι το ριζικό στοιχείο της εφαρμογής Vue.

main.jsΕίναι το αρχείο καταχώρισης της εφαρμογής, που χρησιμοποιείται συνήθως για την εισαγωγή εξαρτήσεων όπως το vue και ο δρομολογητής vue.

2) Τροποποιημένη δομή καταλόγου

Για την υλοποίηση της συνάρτησης σύνδεσης και εγγραφής, η τροποποιημένη δομή καταλόγου είναι:


3. Γράψτε τη σελίδα εγγραφής σύνδεσης

1)LoginAndRegister.vue

Δημιουργήστε LoginAndRegister.vue κάτω από το φάκελο components για την υλοποίηση της σελίδας σύνδεσης και εγγραφής και των συναρτήσεων Εδώ, δημιουργώ μόνο ένα αρχείο .vue για σύνδεση και εγγραφή, στο οποίο το v-if χρησιμοποιείται για να προσδιορίσει εάν τα στοιχεία μπλοκ σύνδεσης και εγγραφής είναι. συμπεριλαμβανομένης της απόδοσης, επηρεάζοντας έτσι την εμφάνισή τους.

Αρχικές ρυθμίσεις

v-if="loginShow"为true, v-if="registerShow"为false

Εναλλάσσει το true και false όταν κάνετε κλικ στο κουμπί για εναλλαγή.

Μετά την επιτυχή εγγραφή, επιστρέψτε στην ενότητα σύνδεσης.

Για λόγους ευκολίας και των συνηθειών του χρήστη, παρόλο που τα χαρακτηριστικά χρήστη περιλαμβάνουν αναγνωριστικό, όνομα χρήστη, κωδικό πρόσβασης, τηλέφωνο και φύλο, μόνο το όνομα χρήστη και ο κωδικός πρόσβασης συμπληρώνονται κατά την εγγραφή και η λειτουργία απλώς εφαρμόζεται δεν είναι αρκετά ασφαλές Θα ενημερώσω ξανά το άρθρο για να γράψω για μια ασφαλέστερη μέθοδο σύνδεσης και εγγραφής, καθώς και για τον τρόπο συμπλήρωσης προσωπικών στοιχείων μετά τη σύνδεση.

LoginAndRegister.vue:

  1. <template>
  2. <div class="container">
  3. <div class="login-box" v-if="loginShow">
  4. <!-- 菱形群-->
  5. <div class="decoration1 decoration"></div>
  6. <div class="decoration2 decoration"></div>
  7. <div class="decoration3 decoration"></div>
  8. <div class="decoration4 decoration"></div>
  9. <div class="decoration5 decoration"></div>
  10. <div class="decoration decoration4 decoration6"></div>
  11. <div class="decoration decoration7 decoration2"></div>
  12. <div class="decoration decoration8 decoration3"></div>
  13. <div class="login-title">
  14. <h1>Login</h1>
  15. </div>
  16. <div class="login-part">
  17. <input class="login-input" v-model="username" placeholder="Username" />
  18. <input class="login-input" type="password" v-model="password" placeholder="Password" />
  19. <button class="login-button" @click="login">Login</button>
  20. <div>
  21. 还未注册?点击<a class="change-link" @click="changeToRegister">这里</a>注册
  22. </div>
  23. </div>
  24. </div>
  25. <div class="login-box" v-if="registerShow">
  26. <!-- 菱形群-->
  27. <div class="decoration1 decoration"></div>
  28. <div class="decoration2 decoration"></div>
  29. <div class="decoration3 decoration"></div>
  30. <div class="decoration4 decoration"></div>
  31. <div class="decoration5 decoration"></div>
  32. <div class="decoration decoration4 decoration6"></div>
  33. <div class="decoration decoration7 decoration2"></div>
  34. <div class="decoration decoration8 decoration3"></div>
  35. <div class="login-title">
  36. <h1>Register</h1>
  37. </div>
  38. <div class="login-part">
  39. <input class="login-input" v-model="username" placeholder="Username" />
  40. <input class="login-input" type="password" v-model="password" placeholder="Password" />
  41. <button class="login-button" @click="register">Register</button>
  42. <span class="change-link" @click="changeToLogin">返回登录</span>
  43. </div>
  44. </div>
  45. <!-- <div class="decoration decoration1"></div>-->
  46. <!-- <div class="decoration decoration2"></div>-->
  47. <!-- <div class="decoration decoration3"></div>-->
  48. <!-- <div class="decoration decoration4"></div>-->
  49. </div>
  50. </template>
  51. <script>
  52. import { ref } from 'vue'
  53. import { useRouter } from 'vue-router' // 导入 useRouter
  54. import '../style/Login.css' // 导入css
  55. export default {
  56. name: 'LoginVue',
  57. setup () {
  58. const username = ref('')
  59. const password = ref('')
  60. const phone = ref('')
  61. const loginShow = ref(true)
  62. const registerShow = ref(false)
  63. const router = useRouter()
  64. const changeToRegister = async () => {
  65. loginShow.value = false
  66. registerShow.value = true
  67. }
  68. const changeToLogin = async () => {
  69. loginShow.value = true
  70. registerShow.value = false
  71. }
  72. const login = async () => {
  73. console.log('Login with:', username.value, password.value)
  74. try {
  75. const formData = new FormData()
  76. formData.append('username', username.value)
  77. formData.append('password', password.value)
  78. const response = await fetch('http://localhost:8081/api/user/login', {
  79. method: 'POST',
  80. body: formData
  81. })
  82. const data = await response.json()
  83. if (response.ok) {
  84. console.log('Link success', data)
  85. if (data.code === 200) {
  86. // 登录成功
  87. alert('登录成功!')
  88. await router.push('/home')
  89. } else {
  90. alert(data.msg)
  91. }
  92. } else {
  93. console.error('Link failed', data)
  94. }
  95. } catch (error) {
  96. console.error('Error login', error)
  97. }
  98. }
  99. const register = async () => {
  100. console.log('Register with:', username.value, password.value)
  101. try {
  102. const formData = new FormData()
  103. formData.append('username', username.value)
  104. formData.append('password', password.value)
  105. const response = await fetch('http://localhost:8081/api/user/register', {
  106. method: 'POST',
  107. body: formData
  108. })
  109. const data = await response.json()
  110. if (response.ok) {
  111. if (data.code === 200) {
  112. console.log('Register success', data)
  113. alert('注册成功!')
  114. await changeToLogin()
  115. } else {
  116. console.log('Register failed', data)
  117. alert(data.msg)
  118. }
  119. } else {
  120. console.error('Register failed', data)
  121. }
  122. } catch (error) {
  123. console.error('Error during register', error)
  124. }
  125. }
  126. return { username, password, phone, login, loginShow, registerShow, changeToRegister, register, changeToLogin }
  127. }
  128. }
  129. </script>
  130. <style>
  131. </style>

2) Home.vue

Η Home.vue είναι η κύρια σελίδα στην οποία μεταβαίνει μετά την επιτυχή σύνδεση.

Home.vue:

  1. <template>
  2. 首页<br><br>
  3. <button class="login-button" @click="signOut">退出登录</button>
  4. </template>
  5. <script>
  6. import { useRouter } from 'vue-router'
  7. export default {
  8. name: 'HomeVue',
  9. setup () {
  10. const router = useRouter()
  11. const signOut = async () => {
  12. await router.push('/')
  13. }
  14. return { signOut }
  15. }
  16. }
  17. </script>
  18. <style scoped>
  19. </style>

3) δρομολογητής

Διαμόρφωση δρομολόγησης σελίδας, ανακατεύθυνση στη σελίδα σύνδεσης όταν η διαδρομή είναι /, /login είναι η σελίδα σύνδεσης και /home είναι η αρχική σελίδα.

index.js:

  1. import { createRouter, createWebHistory } from 'vue-router'
  2. import Login from '../components/LoginAndRegister.vue'
  3. import Home from '../views/Home.vue'
  4. const routes = [
  5. {
  6. path: '/',
  7. redirect: '/login'
  8. },
  9. {
  10. path: '/login',
  11. name: 'Login',
  12. component: Login
  13. },
  14. {
  15. path: '/home',
  16. name: 'Home',
  17. component: Home
  18. }
  19. ]
  20. const router = createRouter({
  21. history: createWebHistory(process.env.BASE_URL),
  22. routes
  23. })
  24. export default router

4) Login.css

Σχεδιασμός CSS για σελίδα εγγραφής σύνδεσης.

Login.css:

  1. *{
  2. margin: 0;
  3. padding: 0;
  4. }
  5. .container{
  6. height: 100vh;
  7. display: flex;
  8. justify-content: center;
  9. align-items: center;
  10. overflow: hidden;
  11. position: relative;
  12. }
  13. .login-box{
  14. background-color: white;
  15. padding: 40px 100px;
  16. border-radius: 8px;
  17. box-shadow: 0 0 5px 1px gainsboro;
  18. position: relative;
  19. }
  20. .login-part{
  21. display: flex;
  22. flex-direction: column;
  23. justify-content: center;
  24. margin-top: 20px;
  25. gap: 20px;
  26. }
  27. .login-input{
  28. width: 250px;
  29. height: 30px;
  30. border-radius: 8px;
  31. }
  32. .login-button{
  33. height: 40px;
  34. border-radius: 8px;
  35. background-color: #2c3e50;
  36. color: white;
  37. transition: 0.5s;
  38. }
  39. .login-button:hover{
  40. background-color: darkcyan;
  41. font-size: 15px;
  42. transition: 0.5s;
  43. }
  44. .login-button:active{
  45. background-color: darkslateblue;
  46. }
  47. .change-link{
  48. color: #00BFFF;
  49. text-decoration: underline;
  50. }
  51. .change-link:hover{
  52. color: cornflowerblue;
  53. }
  54. .decoration {
  55. position: absolute;
  56. width: 200px;
  57. height: 200px;
  58. background: linear-gradient(to left, #FDF5E6, #96CDCD );
  59. clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%);
  60. z-index: 1;
  61. }
  62. .decoration1 {
  63. top: 150px;
  64. left: -210px;
  65. }
  66. .decoration2 {
  67. top: 20px;
  68. right: -20px;
  69. width: 100px; /* 第二个菱形的大小 */
  70. height: 100px;
  71. background: linear-gradient(to right, #FFF5EE, #E6E6FA);
  72. }
  73. .decoration3 {
  74. top: 50px;
  75. right: -180px;
  76. width: 200px; /* 第三个菱形的大小 */
  77. height: 200px;
  78. background: linear-gradient(to right, #7FFFD4, cadetblue);
  79. }
  80. .decoration4 {
  81. top: 200px;
  82. right: -200px;
  83. width: 500px; /* 第三个菱形的大小 */
  84. height: 500px;
  85. z-index: -1;
  86. clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%);
  87. background: linear-gradient(to right, #FFFACD, #00BFFF);
  88. }
  89. .decoration5 {
  90. top: -100px;
  91. right: 200px;
  92. width: 400px; /* 第三个菱形的大小 */
  93. height: 400px;
  94. z-index: -1;
  95. clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%);
  96. background: linear-gradient(to right, #AFEEEE, #00BFFF);
  97. }
  98. .decoration6 {
  99. top: 10px;
  100. right: -680px;
  101. }
  102. .decoration7 {
  103. top: -170px;
  104. right: -500px;
  105. }
  106. .decoration8 {
  107. top: -140px;
  108. right: -655px;
  109. }

5) Εμφάνιση σελίδας εγγραφής σύνδεσης

Τα μπλοκ σε σχήμα διαμαντιού είναι διατεταγμένα τυχαία και αρχικά μοιάζουν με αυτό:

Αργότερα, πρόσθεσα μερικά ακόμη μπλοκ σε σχήμα ρόμβου και άλλαξα τη θέση και τα χρώματα τους. Το τελικό αποτέλεσμα είναι το εξής:

2. Δημιουργήστε έργο Springboot+mysql+mybatis και συνδεθείτε στη βάση δεδομένων

Χρησιμοποιήστε Springboot, mysql, mybatis για να δημιουργήσετε απλώς ένα έργο back-end και να συνδεθείτε στη βάση δεδομένων, αναφορά:

ιδέα, Spring boot+MySQL+MyBatis έργο δημιουργεί και εμφανίζει τα περιεχόμενα του πίνακα βάσης δεδομένων στην ιστοσελίδα page_idea εμφανίζει τη βάση δεδομένων στην ιστοσελίδα-CSDN Blog

Συμπλήρωμα του άρθρου:

Εάν θεωρείτε ότι είναι δύσκολο να γράφετε set και να λαμβάνετε μεθόδους κάθε φορά που δημιουργείτε μια κλάση οντοτήτων, μπορείτε να προσθέσετε τις ακόλουθες εξαρτήσεις στο pom.xml:

  1. <dependency>
  2. <groupId>org.projectlombok</groupId>
  3. <artifactId>lombok</artifactId>
  4. </dependency>

Στη συνέχεια, χρησιμοποιήστε τον σχολιασμό @Data στην κλάση οντοτήτων για να παραλείψετε να γράψετε το σύνολο και να λάβετε μεθόδους:

Η διαδικασία είναι σχεδόν η ίδια, αλλά τα δεδομένα που δημιούργησα αυτή τη φορά είναι διαφορετικά. Ο κύριος λόγος είναι ότι τα χαρακτηριστικά και τα δεδομένα του πίνακα χρηστών έχουν αλλάξει (η διαφορά δεν είναι μεγάλη, επομένως η σούπα δεν αλλάζει το φάρμακο).

Αντιμετώπισε πρόβλημα: το maven συνεχίζει να κατεβάζει εξαρτήσεις, αλλά δεν υπάρχει απάντηση για μεγάλο χρονικό διάστημα

Ωστόσο, κάτι πήγε στραβά κατά τη δημιουργία του έργου. Αυτή τη φορά χρησιμοποίησα έναν νέο υπολογιστή για να δημιουργήσω το έργο back-end -ins, και δεν υπήρξε απάντηση για μεγάλο χρονικό διάστημα:

Λύση:

Εκκαθάριση την προσωρινή μνήμη και επανεκκίνησα την ιδέα, αλλά είχε μικρό αποτέλεσμα.

Αργότερα ανακάλυψα ότι μπορεί να οφείλεται στο ότι η Maven χρησιμοποιεί μια ξένη κεντρική αποθήκη από προεπιλογή, και εγώ χρησιμοποιούσα την προσθήκη maven στην ιδέα, οπότε η ταχύτητα λήψης θα ήταν πολύ αργή.

Έτσι, κατέβασα το maven τοπικά, ανατρέξτε στο σεμινάριο:

Οδηγός λήψης και εγκατάστασης του Maven (εξαιρετικά λεπτομερής)_ιστολόγιο εγκατάστασης του Maven-CSDN

Κατεβάστε σύμφωνα με το σεμινάριο και τροποποιήστε τη διεύθυνση URL της εικόνας στη διαδρομή εγκατάστασης maven-&gt;conf-&gt;settings.xml, ωστόσο, δεν διαμόρφωσα τις μεταβλητές περιβάλλοντος, το έθεσα απευθείας στην ιδέα στο file-&gt;settings-&gt; Build, Execution, Deployment-&gt;Build Tools-&gt; Στο Maven, αλλάξτε την αρχική διαδρομή Maven στην τοπική διαδρομή:

Μετά την τροποποίηση, η ταχύτητα λήψης είναι πράγματι πολύ μεγαλύτερη.

Η δομή καταλόγου του τελικού έργου υποστήριξης είναι η εξής:

3. Γράψτε τις λειτουργίες σύνδεσης και εγγραφής back-end

1. Λογική σύνδεσης

Λάβετε τις συμπληρωμένες πληροφορίες που διαβιβάζονται από το μπροστινό μέρος, συμπεριλαμβανομένων του ονόματος χρήστη και του κωδικού πρόσβασης, και το ερώτημα με βάση το όνομα χρήστη και τον κωδικό πρόσβασης στη βάση δεδομένων, αυτό σημαίνει ότι ο χρήστης υπάρχει και το όνομα χρήστη και ο κωδικός πρόσβασης αντιστοιχούν Η σύνδεση είναι επιτυχής, διαφορετικά αποτυγχάνει.

2. Λογική εγγραφής

Λάβετε τις πληροφορίες συμπλήρωσης που έχουν περάσει από το μπροστινό μέρος, συμπεριλαμβανομένου του ονόματος χρήστη και του κωδικού πρόσβασης Αφού κρίνετε ότι οι πληροφορίες εισόδου δεν είναι κενές, αναζητήστε πρώτα το όνομα χρήστη στη βάση δεδομένων αποτυγχάνει και επιστρέφονται οι πληροφορίες αποτυχίας, οι χρήστες μπορούν να εγγραφούν και να εισαγάγουν την εγγραφή στη βάση δεδομένων.

3. Τμήμα κώδικα υποστήριξης

Μεταξύ αυτών πόροι-&gt;mapper-&gt;UserMapper.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
  4. <mapper namespace="com.example.demo.mapper.UserMapper" >
  5. <resultMap id="result" type="com.example.demo.entity.User">
  6. <result property="id" column="id" />
  7. <result property="username" column="username" />
  8. <result property="password" column="password" />
  9. <result property="phone" column="phone" />
  10. <result property="gender" column="gender"/>
  11. </resultMap>
  12. <!-- 通过用户名和密码查找对应用户,用于登录-->
  13. <select id="findUserByNameAndPwd" resultMap="result" parameterType="User">
  14. select * from user
  15. where username = #{username}
  16. and password = #{password}
  17. </select>
  18. <!-- 通过用户名查找对应用户,用于注册检验用户名是否已存在-->
  19. <select id="findUserByName" resultMap="result" parameterType="User">
  20. select * from user
  21. where username = #{username}
  22. </select>
  23. <!-- 添加用户-->
  24. <insert id="addUser" parameterType="User">
  25. insert into user (username, password)
  26. values ( #{username}, #{password} )
  27. </insert>
  28. </mapper>

java-&gt;com.example.demo-&gt;mapper-&gt;UserMapper.java:

  1. package com.example.demo.mapper;
  2. import com.example.demo.entity.User;
  3. import org.apache.ibatis.annotations.Mapper;
  4. @Mapper
  5. public interface UserMapper {
  6. // 通过用户名和密码查找对应用户
  7. public User findUserByNameAndPwd(User user);
  8. // 通过用户名查找用户
  9. public User findUserByName(User user);
  10. // 添加用户
  11. public void addUser(User user);
  12. }

java-&gt;com.example.demo-&gt;service-&gt;UserService.java:

  1. package com.example.demo.service;
  2. import com.example.demo.entity.User;
  3. public interface UserService {
  4. // 通过用户名和密码查找对应id
  5. public User findUserByNameAndPwd(User user);
  6. // 通过用户名查找用户
  7. public User findUserByName(User user);
  8. // 添加用户
  9. public void addUser(User user);
  10. }

java-&gt;com.example.demo-&gt;service-&gt;UserServiceImpl.java:

  1. package com.example.demo.service;
  2. import com.example.demo.entity.User;
  3. import com.example.demo.mapper.UserMapper;
  4. import jakarta.annotation.Resource;
  5. import org.springframework.stereotype.Service;
  6. @Service
  7. public class UserServiceImpl implements UserService {
  8. @Resource
  9. private UserMapper userMapper;
  10. // 通过用户名和密码查找对应id
  11. @Resource
  12. public User findUserByNameAndPwd(User user){
  13. return userMapper.findUserByNameAndPwd(user);
  14. }
  15. // 通过用户名查找用户
  16. @Resource
  17. public User findUserByName(User user){
  18. return userMapper.findUserByName(user);
  19. }
  20. // 添加用户
  21. @Resource
  22. public void addUser(User user){
  23. userMapper.addUser(user);
  24. }
  25. }

java-&gt;com.example.demo-&gt;controller-&gt;UserController.java:

  1. package com.example.demo.controller;
  2. import com.example.demo.entity.User;
  3. import com.example.demo.result.Result;
  4. import com.example.demo.service.UserService;
  5. import jakarta.annotation.Resource;
  6. import org.springframework.web.bind.annotation.*;
  7. @RestController
  8. @RequestMapping("/api/user")
  9. public class UserController {
  10. @Resource
  11. UserService userService;
  12. // 登录
  13. @CrossOrigin
  14. @PostMapping(value = "/login")
  15. public Result login(@ModelAttribute("user") User user){
  16. String username=user.getUsername();
  17. String password=user.getPassword();
  18. System.out.println("Login received username: " + username);
  19. System.out.println("Login received password: " + password);
  20. User userCheck = new User();
  21. userCheck.setUsername(username);
  22. userCheck.setPassword(password);
  23. System.out.println(userCheck.getUsername() + " " + userCheck.getPassword());
  24. try{
  25. User findUser = userService.findUserByNameAndPwd(userCheck);
  26. if(findUser != null){
  27. return Result.success(findUser);
  28. }else {
  29. return Result.failure(401,"用户名或密码错误");
  30. }
  31. }catch (Exception e){
  32. return Result.failure(500,"服务器异常");
  33. }
  34. }
  35. // 注册
  36. @CrossOrigin
  37. @PostMapping(value = "/register")
  38. public Result register(@ModelAttribute("user") User user){
  39. // String username = "222";
  40. // String password = "222";
  41. User userCheck = new User();
  42. userCheck.setUsername(user.getUsername());
  43. userCheck.setPassword(user.getPassword());
  44. if(userCheck.getUsername() == null || userCheck.getUsername().isEmpty() || userCheck.getPassword() == null || userCheck.getPassword().isEmpty()){
  45. System.out.println("用户名或密码不可为空");
  46. return Result.failure(201,"用户名和密码不可为空");
  47. }else {
  48. System.out.println("Register received username: " + userCheck.getUsername());
  49. System.out.println("Register received password: " + userCheck.getPassword());
  50. try{
  51. // 先在数据库中查找是否已有用户名相同的用户
  52. User findUser = userService.findUserByName(userCheck);
  53. if(findUser != null){
  54. // 用户名已存在
  55. return Result.failure(202,"用户名已存在!");
  56. }
  57. else {
  58. // 新用户,数据库添加记录
  59. userService.addUser(userCheck);
  60. return Result.success(userCheck);
  61. }
  62. }catch (Exception e) {
  63. return Result.failure(500, "服务器异常");
  64. // }
  65. }
  66. }
  67. }
  68. }

4. Εκτελέστε το έργο

Το μπροστινό και το πίσω άκρο εκτελούνται και ξεκινούν χωριστά Εδώ άλλαξα τη θύρα πίσω άκρου σε 8081 στο application.properties και το μπροστινό μέρος είναι το προεπιλεγμένο 8080. Έτσι, αφού τα έργα του μπροστινού και του πίσω άκρου εκτελεστούν με επιτυχία, πληκτρολογήστε http:/. /localhost:8080 στο πρόγραμμα περιήγησης, ελέγξτε το στο δίκτυο των εργαλείων προγραμματιστή, συνδεθείτε με επιτυχία στο backend και κατά τη σύνδεση και την εγγραφή για είσοδο δοκιμής, μπορούν να επιστραφούν με επιτυχία διαφορετικές πληροφορίες προτροπής και αναδυόμενα μηνύματα:

Μετά την επιτυχή είσοδο: