vue koa2 mongodb 從零開始做個人博客(一) 登錄註冊功能前端部分

来源:https://www.cnblogs.com/wangzirui98/archive/2020/01/18/12207902.html
-Advertisement-
Play Games

0.效果演示 插入視頻插不進來,就很煩。可以出門右拐去優酷看下(點我!)。 1.準備工作 1.1前端框架 前端使用了基於vue.js的nuxt.js。為什麼使用nuxt.js? 首先我做的是博客的項目,所以SSR至關重要。雖然跟本文要講的登錄註冊沒有什麼關係,但是文章如果用axios來非同步獲取的話, ...


0.效果演示

插入視頻插不進來,就很煩。可以出門右拐去優酷看下(點我!)。 

1.準備工作

1.1前端框架

前端使用了基於vue.js的nuxt.js。為什麼使用nuxt.js

首先我做的是博客的項目,所以SSR至關重要。雖然跟本文要講的登錄註冊沒有什麼關係,但是文章如果用axios來非同步獲取的話,那麼搜索引擎是抓不到任何數據的。用nuxt.js可以說是為了整個項目考慮。

第二點就是省事,Nuxt.js的項目條理非常清晰,有非常方便的路由和模板功能,而且方便前端和服務端進行溝通。而且自動支持es67的語法,自帶nodemon功能之類的不再贅述。感興趣的可以自行百度。

1.2後端框架

用了koa2,如果使用Nuxt.js的話可以直接將後段項目放在server目錄。使用koa2大勢所趨,不多解釋,都0202年了,所以不存在插件比express少的問題。

1.3資料庫

資料庫用的是mongodb和redis,為什麼一起用,因為redis更適合做一些緩存類的工作,而且操作便捷,適合儲存驗證碼或者session等臨時數據。mongodb適合做資料庫,有聚合管道和多級聯合之類的騷操作,能夠和mysql等關係型資料庫媲美。但是因為我是前端嘛,mongoose的寫法更舒服點,所以就選用了mongodb。

1.4ui框架

用了element-ui,為什麼用element-ui,因為大家都在用嘛,跟風。

2.項目搭建

多說無益,感興趣可以直接進nuxt.js的官網。

首先安裝npx,然後用 create-nuxt-app 來創建項目,命令行如下。

$ npx create-nuxt-app project-name

然後按照提示就可以進入項目了,其中有幾個小坑,提幾嘴。

  • 歷史原因,後端預設是不支持es6import語法的,所以要配置babel,方法如下
    • 安裝插件  npm i babel-preset-es2015
    • 在項目目錄里新建 .babelrc 文件,然後在裡面輸入內容 { "presets": ["es2015"] } 並保存。
    • 最後在 package.json 里的 "scripts" 里的 dev  start 末尾添加 --exec babel-node 並保存。如下
    • 1  "scripts": {
      2     "dev": "cross-env NODE_ENV=development nodemon server/index.js --watch serve --exec babel-node",
      3     "build": "nuxt build",
      4     "start": "cross-env NODE_ENV=production node server/index.js --exec babel-node",
      5     "generate": "nuxt generate"
      6   },

       

3.項目搭建

3.1項目目錄介紹

首先來觀察下nuxt.js的目錄,可以大體看出來我們要怎麼寫這個項目。

 

 挨個解釋一下

  • assets顧名思義,放未編譯的靜態資源的地方。
  • components放組件的
  • layouts模板裡面可以放指定的模板,就是相當於相框的意思
  • middleware中間件。
  • node_modules放依賴的地方
  • pages就是頁面,nuxt.js給你配置好了,在裡面新建一個1.vue 就相當於配置了一個“/1”的路由。
  • plugins放插件的地方,插件可以在裡面提前配置好,然後導出。
  • server就是後端的文件夾,裡面有些複雜,等待會兒展開說。
  • static靜態文件的地方
  • store放vuex模型的地方

詳細請看文檔(點我!

3.2 前端搭建

前端重點不是特別多,唯一有點複雜的就是表單校驗,但是好在element-ui已經給做好了。

但還是從頭簡要的說一遍,首先就是新建模板,模板就是套在外面的相框

 

如圖,綠色框中就相當於模板,然後活動部分就相當於page內容,page就好像vue-cli里中的vue-router內容,事實也確實是這樣,只不過nuxt.js換了個說法。

 1 <template>
 2   <div class="body1">
 3     <div class="container animated slideInDown">
 4       <header>
 5         <Myheader :location="this.location" />
 6       </header>
 7       <main class="main">
 8         <nuxt />
 9       </main>
10       <footer>
11         <Myfooter />
12       </footer>
13     </div>
14   </div>
15 </template>
 1 <script>
 2 import Myheader from "../components/public/header";
 3 import Myfooter from "../components/public/footer";
 4 export default {
 5   components: {
 6     Myheader,
 7     Myfooter
 8   },
 9   data: () => {
10     return {
11       location: ""
12     };
13   },
14   mounted() {
15     this.location = window.location.href.split("/").pop();
16   }
17 };
18 </script>

這的location屬性是為了判斷模板頂上的登錄註冊字樣是否要在登錄頁面註冊頁面出現。不過這都不是重點,重點是本文要講的登錄註冊功能,所以理所當然這裡就是隨便講一下。不做過多的描述。

3.2.1註冊頁面搭建

 

 不多廢話,直接看代碼,代碼位置 @/pages/register.js 

<template>
  <div class="login_container">
    <!-- 首先element表單的外標簽。標簽里的屬性可以參考element-ui文檔的Form表單 -->
    <el-form
      :model="ruleForm"
      :rules="rules"
      ref="ruleForm"
      class="ruleForm"
      label-width="100px"
      size="small"
    >
      <!-- 其中表單項用el-form-item標簽包起來,證明這是一個表單項目 -->
      <el-form-item label="用戶名" prop="name">
        <el-input v-model="ruleForm.name"></el-input>
      </el-form-item>
      <el-form-item label="密碼" prop="password">
        <el-input v-model="ruleForm.password"></el-input>
      </el-form-item>
      <el-form-item label="確認密碼" prop="password2">
        <el-input v-model="ruleForm.password2"></el-input>
      </el-form-item>
      <el-form-item label="郵箱" prop="email">
        <el-input v-model="ruleForm.email"></el-input>
        <el-button
          @click="sendMsg"
          class="sendemail"
          :disabled="ruleForm.verifyflag"
        >{{ ruleForm.verifymsg }}</el-button>
      </el-form-item>

      <el-form-item label="驗證碼" prop="code">
        <el-input v-model="ruleForm.code"></el-input>
      </el-form-item>
      <el-form-item>
        <el-button @click="submitForm('ruleForm')">註冊</el-button>
        <!-- <el-button @click="resetForm('ruleForm')"></el-button> -->
      </el-form-item>
    </el-form>
  </div>
</template>

 

接著放代碼,是用來接收表單信息的 ruleForm 對象

1      ruleForm: {
2         name: "",
3         password: "",
4         password2: "",
5         email: "",
6         code: "",
7         verifymsg: "發送驗證碼", // 要設置成動態的data,而不是直接填寫在按鈕里是因為data需要變化,直接操作data方便一點。
8         verifyflag: false // 測試現在按鈕是否可以點擊,因為60秒之內不能重覆發驗證碼
9       },

 

表單現在校驗不需要直接操作dom節點或者驗證ruleForm里的數據。因為element-ui提供了校驗的方法。控制著校驗方法的就是其中表單的屬性 :rules="rules" 的rules對象。

老樣子直接放代碼:

 1   rules: {
 2         name: [{ required: true, message: "請輸入用戶名", trigger: "blur" }],
 3         password: [{ required: true, message: "請輸入密碼", trigger: "blur" }],
 4         password2: [
 5           {
 6             required: true,
 7 
 8             message: "請確認您的密碼",
 9             trigger: "blur"
10           },
11           {
12             validator: (rule, value, callback) => {
13               if (value === "") {
14                 callback(new Error("請再次輸入密碼"));
15               } else if (value !== this.ruleForm.password) {
16                 callback(new Error("兩次輸入密碼不一致"));
17               } else {
18                 callback();
19               }
20             },
21             trigger: "blur"
22           }
23         ],
24         email: [
25           {
26             required: true,
27             type: "email",
28             message: "請正確輸入您的郵箱",
29             trigger: "blur"
30           }
31         ],
32         code: [
33           {
34             required: true,
35             message: "請正確輸入您的驗證碼",
36             trigger: "blur"
37           }
38         ]
39       }

 

簡單講解一下,rules的每個屬性都是一個數組,裡面放著對象,就是校驗這個表單同名屬性的方法。比較簡單的就類似校驗name屬性,只需要判斷他是否是必填的,如果每天就提示message的信息。

複雜一點的就像password2一樣,在校驗數組裡有第二個對象,添加一個validator方法就行了。後面的參數和更詳細的用法歡迎看文檔(點我!

就這樣現在這個表單已經可以做前端的校驗了。添加方法等後端完成(下篇博客)以後再說。

同理我們新建 @/pages/login.vue 時,同樣自動創建好了login的路由,我們只需要專註代碼即可。

 1 <template>
 2   <div class="login_container">
 3     <el-form
 4       :model="ruleForm"
 5       :rules="rules"
 6       ref="ruleForm"
 7       class="ruleForm"
 8       label-width="100px"
 9       size="small"
10     >
11       <el-form-item label="用戶名" prop="name">
12         <el-input v-model="ruleForm.name"></el-input>
13       </el-form-item>
14       <el-form-item label="密碼" prop="password">
15         <el-input v-model="ruleForm.password" show-password></el-input>
16       </el-form-item>
17       <el-form-item>
18         <el-button @click="submitForm('ruleForm')">登錄</el-button>
19         <el-button @click="resetForm('ruleForm')">註冊</el-button>
20       </el-form-item>
21     </el-form>
22   </div>
23 </template>
24 
25 <script>

同理上script代碼

 1  data() {
 2     return {
 3       ruleForm: {
 4         name: "",
 5         password: ""
 6       },
 7       rules: {
 8         name: [{ required: true, message: "請輸入用戶名", trigger: "blur" }],
 9         password: [{ required: true, message: "請輸入密碼", trigger: "blur" }]
10       }
11     };

ok,前端大體就是這樣,還是比較簡單的。

但是css問題暫時沒有寫,畢竟自己不是做ui的,簡潔大方就行了,功能性足夠就好。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 博客項目登錄註冊功能後端,涉及到mongodb,redis,vuex,nuxt.js,mongoose,koa-redis,smtp使用的基本操作 ...
  • 在Vue進行前端開發中,事件監聽是必不可少的功能,本文通過簡單的小例子,簡述v-on的簡單用法,僅供學習分享使用,如有不足之處,還請指正。 ...
  • react native運行helloword 今天是個特殊的時刻,我前天開始學習react native,一直環境塔建出錯,運行打包出錯,今晚,我終於把這個難搞的環境給搭建好了,併成功運行了第一個helloword!! 這個環境:python2+java jdk+Android 我全部是照著官網弄 ...
  • 分享一些基礎小白們可能不知道的東西、以及一些基礎的知識的註意事項 ...
  • 引言 在 "上一篇文章" 中我們通過 腳手架快速搭建了一個簡單的示例,並基於該示例講解了在類組件中 和`React.PureComponent @babel/preset react render React.createElement React.createElement ReactElemen ...
  • Json的介紹和Json結構 JSON是JavaScript Object Notation的縮寫,意思是JavaScript 對象表示法 是存儲和交換文本信息的語法。類似 XML,不過它比 XML 更小、更快,更易解析 官網的介紹 http://www.json.org/json zh.html ...
  • 在用到el-tree的懶載入和預設勾選功能時,若第一次勾選前幾個連續節點,第二次進入預設勾選時,由於el-tree子節點尚未完全載入(只載入出來前幾個),預設勾選已經開始(已載入出來的子節點被預設勾選),這時el-tree會認為子節點全部勾選,所以父節點也被勾選,這就導致所有子節點都被勾選; 解決方 ...
  • 本篇不會過多講述 ts 語法,著重記錄下 在 React 中使用 ts 的方法以及踩坑經過。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...