当前位置:   article > 正文

从零开始创建一个个人博客前端Vue,后端node.js(第一天)_前端个人博客

前端个人博客

一、前言(具体代码在尾页)

1、创建vue项目可以使用vue ui命令进行快速的搭建

2、由于我是一个新手所以说,前端使用的是element ui快速构造了一个网页(头秃,没有设计稿,ui空白一片),对于新手程序员的话如果说没有比较适合练手的项目,也可以试试搭建一个,比较考验自己的学习成果

3、第一天只是把登录界面的前台登录,和后端的请求交互进行了一下处理(在老家,过年事情比较多,还没有空调,做一个小时就冷的很,第一天也就搞了有两三个小时吧)

此处贴一个登录页的图

二、前端实现过程

1、页面布局

采用element ui的container布局容器进行了基本的页面构造:一个头部,和主页面区域

2、前端实现表单数据的验证

此处是使用的是form表单的表单验证,使用element ui 的话很方便,此处在官网截取了一小段验证规则的写法(是不是超级简单),虽然说前端进行了数据的基本的校验,但是在数据发送到后端的时候还是需要进行数据的校验的(此处是后话了)

  1. rules: {
  2. name: [
  3. { required: true, message: '请输入活动名称', trigger: 'blur' },
  4. { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
  5. ],

此处是粘了一个校验的结果(失去焦点时触发)

 3、登录成功和登录失败时弹出的消息提醒

 此处粘了一个登录成功和失败进行的消息提醒

!!!此处进行了数据的请求,向后台的服务器发送数据,比对数据库已经存在的账号信息(由于是个人博客就没有注册的功能(真是个小机灵鬼))

 三、后端的实现过程

1、初始化进行一个基本的服务器的创建(我用的是express框架)

  1. const express = require('express')
  2. const app = exxpress()
  3. app.listen(8080,()=>{
  4. console.log('服务器已经运行在了127.0.0.1:8080')
  5. })

2、添加数据库并进行数据的初始化

此处粘的是数据库里面的数据

  1. const mysql = require('mysql')
  2. // 引入cors资源,解决跨域问题
  3. const cors = require('cors')
  4. // 配置基本的数据库模块
  5. const db = mysql.createConnection({
  6. host: '127.0.0.1',
  7. user: 'root',
  8. password: 'zhang187332',
  9. database: 'self_boke'
  10. })

上面的cors是一个中间件用来进行解决浏览器的跨域问题的

3、定义路由(本人是第一次进行项目的独立开发(模块化并不熟练就在一个页面中进行的))

  1. app.get('/login', (req, res) => {
  2. const dd = req.query
  3. db.query(`select * from login_data where username=? and password=?`, [req.query.username, req.query.password], (err, rst) => {
  4. if (err) return res.send(err.message)
  5. if (rst.length !== 1) {
  6. return res.send('查询错误')
  7. }
  8. console.log(rst)
  9. res.send({
  10. status: 200,
  11. message: '登陆成功'
  12. })
  13. })
  14. })

以上就是全部的了明天见哦

附件代码:

1、login.vue

  1. <template>
  2. <div id="app">
  3. <el-container>
  4. <el-header>
  5. <h1>欢迎来到我的个人博客</h1>
  6. </el-header>
  7. <el-main>
  8. <!-- 卡片区域 -->
  9. <el-card>
  10. <!-- 表单输入区域 -->
  11. <el-form :model="form" :rules="formRules" ref="formRef" label-width="80px">
  12. <el-form-item label="用户名:" prop="username">
  13. <el-input v-model="form.username"></el-input>
  14. </el-form-item>
  15. <el-form-item label="密码:" prop="password">
  16. <el-input v-model="form.password"></el-input>
  17. </el-form-item>
  18. <!-- 下面的登录和重置按钮的实现 -->
  19. <el-form-item id="btnPlaceSet">
  20. <el-button @click="login" type="primary">登录</el-button>
  21. <el-button @click="reset" type="danger">重置</el-button>
  22. </el-form-item>
  23. </el-form>
  24. </el-card>
  25. </el-main>
  26. </el-container>
  27. </div>
  28. </template>
  29. <script>
  30. export default {
  31. data() {
  32. return {
  33. // 登录表单的数据源
  34. form: {
  35. username: '',
  36. password: ''
  37. },
  38. // from表单的校验规则定义
  39. formRules: {
  40. username: [
  41. { required: true, message: '请输入用户名', trigger: 'blur' },
  42. { min: 1, max: 45, message: '长度在 1 到 45 个字符', trigger: 'blur' }
  43. ],
  44. password: [
  45. { required: true, message: '请输入密码', trigger: 'blur' },
  46. { min: 1, max: 45, message: '长度在 1 到 45 个字符', trigger: 'blur' }
  47. ]
  48. }
  49. }
  50. },
  51. methods: {
  52. // 点击登录时候的执行函数
  53. async login() {
  54. const { data: res } = await this.$http.get('/login', { params: this.form })
  55. if (res.status !== 200) {
  56. return this.$message.error('登录失败')
  57. }
  58. this.$message.success('登录成功')
  59. this.$router.push('/home')
  60. },
  61. // 点击重置时候的执行函数
  62. reset() {
  63. this.$refs.formRef.resetFields()
  64. }
  65. }
  66. }
  67. </script>
  68. <style lang="less" scoped>
  69. .el-container {
  70. height: 100%;
  71. .el-header {
  72. background-color: #b3c0d1;
  73. color: #333;
  74. text-align: center;
  75. line-height: 60px;
  76. }
  77. .el-main {
  78. display: flex;
  79. justify-content: center;
  80. align-items: center;
  81. background-color: #e9eef3;
  82. color: #333;
  83. text-align: center;
  84. height: 100%;
  85. .el-card {
  86. width: 30%;
  87. #secondRow {
  88. margin-top: 30px;
  89. }
  90. .el-input {
  91. width: 100%;
  92. }
  93. #btnPlaceSet {
  94. width: 100% !important;
  95. display: flex;
  96. justify-content: space-around !important;
  97. }
  98. }
  99. }
  100. .pwdHeight {
  101. line-height: 40px;
  102. }
  103. }
  104. </style>

2、前端路由的实现

  1. import Vue from 'vue'
  2. import VueRouter from 'vue-router'
  3. import Home from '@/views/Home.vue'
  4. import Login from '@/views/Login.vue'
  5. Vue.use(VueRouter)
  6. // 定义路由节点
  7. const routes = [
  8. { path: '/', redirect: '/login' },
  9. { path: '/home', component: Home },
  10. { path: '/login', component: Login }
  11. ]
  12. const router = new VueRouter({
  13. mode: 'history',
  14. base: process.env.BASE_URL,
  15. routes
  16. })
  17. export default router

3、前端main.js

  1. import Vue from 'vue'
  2. import App from './App.vue'
  3. import router from './router'
  4. // 引入elementui样式表和js
  5. import 'element-ui/lib/theme-chalk/index.css'
  6. import { Message } from 'element-ui'
  7. import '@/plugins/element.js'
  8. // 引入自定义的全局样式
  9. import '@/assets/CSS/global.css'
  10. // 导入处理网络请求的包axios来实现ajax请求
  11. import axios from 'axios'
  12. // 给axios设置一个默认的访问地址
  13. axios.defaults.baseURL = 'http://127.0.0.1:3006'
  14. // 因为axios并不是插件,所以不能像其他插件一样在main.js文件中引入之后直接使用,只能是其他组件使用的时候实时引入
  15. Vue.prototype.$http = axios
  16. Vue.prototype.$message = Message
  17. new Vue({
  18. router,
  19. render: (h) => h(App)
  20. }).$mount('#app')

4、后端app.js

  1. const express = require('express')
  2. // 引入数据库模块
  3. const mysql = require('mysql')
  4. // 引入cors资源,解决跨域问题
  5. const cors = require('cors')
  6. // 配置基本的数据库模块
  7. const db = mysql.createConnection({
  8. host: '127.0.0.1',
  9. user: 'root',
  10. password: 'zhang187332',
  11. database: 'self_boke'
  12. })
  13. // 数据库链接
  14. db.connect()
  15. // 实例化一个基本的服务器
  16. const app = express()
  17. // cors中间件的引用与使用
  18. app.use(cors())
  19. app.get('/login', (req, res) => {
  20. const dd = req.query
  21. db.query(`select * from login_data where username=? and password=?`, [req.query.username, req.query.password], (err, rst) => {
  22. if (err) return res.send(err.message)
  23. if (rst.length !== 1) {
  24. return res.send('查询错误')
  25. }
  26. console.log(rst)
  27. res.send({
  28. status: 200,
  29. message: '登陆成功'
  30. })
  31. })
  32. })
  33. app.listen(3006, () => {
  34. console.log('服务已经启动在了http://127.0.0.1:3006')
  35. })

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/368662
推荐阅读
相关标签
  

闽ICP备14008679号