最近利用vue+nodejs+mysql实现了一个简单的仿豆瓣网站,记录一下实现的过程。

先放上github地址:https://github.com/jaminejiang/douban.git

首先是搭建框架。

项目需要安装的是node和git,这里不详细讲
快速搭建vue-cli可以按照官网的步骤:点击打开链接
# 全局安装 vue-cli
$ npm install --global vue-cli
# 创建一个基于 webpack 模板的新项目
$ vue init webpack my-project
# 安装依赖,走你
$ cd my-project
$ npm install
$ npm run dev
webpack帮我们打包好了,简单的看一下生成的\build\webpack.base.conf.js中的内容
entry: {
    app: './src/main.js'
  },
  output: {
    path: config.build.assetsRoot,
    filename: '[name].js',
    publicPath: process.env.NODE_ENV === 'production'
      ? config.build.assetsPublicPath
      : config.dev.assetsPublicPath
  },
entry规定了入口为main.js,通过这个入口index.html页面就可以利用main.js渲染App.vue.

接下来搭建后台服务器部分,以实现操作数据库等。

在根目录创建一个server文件夹,文件夹中api文件夹实现业务逻辑,db.js封装数据库的信息,包括用户名密码等,sqlMap实现映射sql语句,而index.js则是服务器的入口。
用git在server文件夹上git bash,引入依赖的包,包括最终要的express和mysql,body-parser等。
之后就可以在命令行敲nodemon index启动后台服务器啦。
注意后台的端口是3000,前台是8080,这里有跨域问题。
app.listen(3000);  //监听的端口号
console.log('success listen at port:3000......');
这里要设置代理与跨域,方法就是设置vue的映射表。
在config文件夹的index.js文件中,加入以下proxyTable设置
// Paths
    assetsSubDirectory: 'static',
    assetsPublicPath: '/',
    proxyTable: {
      '/api':{
        target: 'http://127.0.0.1:3000/api/',
        changeOrigin: true,
        pathRewrite: {
            '^/api': ''
        }
      }
    },
意思就是前台请求中带有/api的地址都会映射到http://127.0.0.1:3000/api中,而在server的index.js中就可以将请求的地址与业务逻辑模块一一对应。

项目最终的映射如下:

app.use('/api/user',userApi);           //到地址'/api/user'的请求将映射到userApi
app.use('/api/film',filmApi);          //到地址'/api/film'的请求将映射到filmApi
app.use('/api/search',searchApi);          //到地址'/api/search'的请求将映射到searchApi
到这里为止前后台的交流已经实现了。
接下来就是写个简单的登陆注册来测试一下。

登陆注册实现

无论学开发什么,最开始我都是登陆注册啊,又简单又能树立信心。
这里先讲一下router映射。
在项目的src文件夹下建一个router.js文件,用来处理前端路由。
import mainComponent from './components/mainComponent'
import userComponent from './components/userComponent'
import userIsLogin from './components/checkIsUserLogin'
import userGoToLogin from './components/loginStyle'
const routers = [
    {
        path:'/',
        redirect:'/main',
        meta:{
            keepAlive:false
        }
    },
    {
        path:'/main',
        name:'mainPage',
        component:mainComponent,
        meta:{
            keepAlive:false
        }
    },
    {
        path:'/userAuthority',
        name:'userPage',
        component:userComponent,
        meta:{
            keepAlive:false
        },
        children:[
            {
                path:'checkUserLogin',
                component:userIsLogin,
                meta:{
                    keepAlive:false
                }
            },
            {
                path:'goToLogin',
                component:userGoToLogin,
                meta:{
                    keepAlive:false
                }
            }
        ] 
    },
   
]
export default routers
设置好router之后还要在入口文件中注册这个router
import Vue from 'vue'
import App from './App'
import vueRouter from 'vue-router'
import routers from './routers'
Vue.config.productionTip = false
Vue.use(vueRouter);
const router = new vueRouter({
  mode:'history',
  routes:routers
});
/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  render: h => h(App)
})
这个router设置一进入主界面就跳转到首页,即展示最新的电影、电视剧等
App.vue中固定了footer,footer中有两个按钮可以在首页和登陆页切换。
import Vue from 'vue'
import App from './App'
import vueRouter from 'vue-router'
import routers from './routers'Vue.config.productionTip = falseVue.use(vueRouter);
const router = new vueRouter({mode:'history',routes:routers
});/* eslint-disable no-new */
new Vue({el: '#app',router,render: h => h(App)
})
上面的userComponent就是实现登陆注册的。
登陆注册模块一跳进去先后台检查是否已经登陆,如果没有才跳转到登陆界面,否则显示用户名。这部分先跳过,直接讲登陆注册。
我是把登陆框和注册框写在一个页面,通过v-if切换,其实回过头看这里完全可以写一个组件从而实现复用,有时间再优化一下吧。
html就略过了,直接看交互部分。
引入axios,实现类似ajax功能。
import axios from 'axios'
import vue from 'vue'
vue.prototype.$axios = axios
goToLogin:function(){    //登陆请求if(!this.loginUserName||!this.loginPwd){  //请求框没有输入完整this.operateModal(1);return false;}else{var _this = this;var loginData = {'username':this.loginUserName,'password':this.loginPwd};this.$axios.post('/api/user/queryUser',loginData).then(function(res){if(res.data==-1){                //用户名不存在_this.loginUserName = '';_this.loginPwd = '';_this.operateModal(2);}else if(res.data==0){          //密码错误_this.loginPwd = '';_this.operateModal(3);}else if(res.data==1){          //登陆成功_this.operateModal(4);}}).catch(function(err){console.log(err);});}},
在server的api中建一个userApi。js文件
var models = require('../db');
var express = require('express');
var router = express.Router();
var mysql = require('mysql');
var $sql = require('../sqlMap');
var session = require('express-session');
var cookieParser = require('cookie-parser');router.use(cookieParser());
router.use(session({secret:'123456',resave: true,saveUninitialized:false})
);//连接数据库
var conn = mysql.createConnection(models.mysql);
conn.connect();//查询用户接口
router.post('/queryUser',(request,response) => {var body = request.body;var queryUser = $sql.user.query_user;conn.query(queryUser,body.username, function( err , result ){if(err){console.log(err);            //数据库操作失败}if(result[0]===undefined){response.send('-1');             //查询不到该用户名}else{if(result[0].password!==body.password){response.send('0');          //密码错误}else{request.session.sessionUserName = body.username;request.session.sessionUserId = result[0].userid;response.send('1');          //查询到该用户,登陆成功}}});
});
数据库语句和数据库设置部分就跳过,可以用navicat在数据库中手动创建几个用户信息就可以测试登陆啦。
注册部分后台代码如下:
router.post('/addUser',( request , response ) => {var body = request.body;var addUser = $sql.user.add;var query_user = $sql.user.query_user;conn.query(query_user, body.username,function( err , result){if(err){console.log(err);}if(result[0]===undefined){conn.query(addUser,[body.username,body.password],function( erradd , res){if(erradd){console.log(erradd);}if(res){request.session.sessionUserId = res.insertId;request.session.sessionUserName = body.username;response.send('1');             //插入成功}});}else{response.send('0');                  //用户已存在,插入失败}});
});

到这里就可以初步跑起来了。

vue-cli从零开始实现一个仿豆瓣app(一)相关推荐

  1. 1-vuejs2.0实战:仿豆瓣app项目,创建自定义组件tabbar

    大家好,我给大家分享一下仿豆瓣app的教程.当然了,我们不是用原生去实现,而是用前端框架vuejs来实现豆瓣app.----第一次写文章,写得不好请见谅. 为什么我们选择豆瓣app 来做这样一个教程? ...

  2. vuejs2.0实战:仿豆瓣app项目,创建自定义组件tabbar

    大家好,我给大家分享一下仿豆瓣app的教程.当然了,我们不是用原生去实现,而是用前端框架vuejs来实现豆瓣app.----第一次写文章,写得不好请见谅. 为什么我们选择豆瓣app 来做这样一个教程? ...

  3. Vue.js 学习笔记十二:Vue CLI 之创建一个项目

    目录 创建一个项目 创建一个项目 运行以下命令来创建一个新项目: vue create vuecli-demo 你会被提示选取一个 preset.你可以选默认的包含了基本的 Babel + ESLin ...

  4. 从零开始写一个抖音App——Apt代码生成技术、gradle插件开发与protocol协议

    1.讨论--总结前两周评论中有意义的讨论并给予我的解答 2.mvps代码生成原理--将上周的 mvps 架构的代码生成原理进行解析 3.开发一款gradle插件--从 mvps 的代码引出 gradl ...

  5. 猿创征文|【Vue五分钟】 Vue Cli脚手架创建一个项目

    目录 前言 一.创建项目的操作步骤 选择路由模式 选择CSS预编译器 选择如何存放配置 自动下载项目所需的包文件 二.启动vue项目 1.项目目录 2.启动项目 3.浏览器打开项目首页界面 三.项目的 ...

  6. vue-catEye - 基于Vue 2.6.7 轻仿猫眼App的单页应用

    =>点我去github 前端代码传送门 =>点我去github 后端代码传送门 关于 本人2020届大三学生,之前学了Vue之后,萌生了一个想要做一个基于Vue的全栈SPA的想法.前端用的 ...

  7. Vue Cli 3 搭建一个可按需引入组件的组件库架子

    Ant-design.Element 这些框架都有按需引入组件的功能.需要使用哪个组件,就引入哪个组件,这样那些没必要的组件就不会打包到我们的项目里了.跟着我下边的步骤,相信大家也能搭建出一个按需引入 ...

  8. 手把手教你从零开始做一个好看的 APP

    前言 从零开始,手把手带你实现一个「专注睡前的 APP」.睡觉之前如果能有一个 APP,能让我们写一写这一天的见闻或者心得,同时又能看一会段子.瞄一会好看的妹子,放松一下疲惫的身心那该多好,这也是我完 ...

  9. Vue(小案例_vue+axios仿手机app)_实现用户评论

    一.前言 1.渲染评论列表 2.点击加载按钮,加载更多    3.提交评论 二.主要内容 1.评论列表一般是注册到一个全局的公共组件中 2.请求后台数据,渲染评论列表 (1)数据格式如下 地址 /ap ...

最新文章

  1. 【响应式Web前端设计】:link、:hover、:active和:visited的区别
  2. 洛谷P2219 [HAOI2007]修筑绿化带(单调队列)
  3. linux nvme分区,这些 loop 分区是什么鬼东西?
  4. Plitch for the final Feb 16
  5. 哈希表处理冲突的方法?
  6. python语言程序设计试卷西京学院_Python语言程序设计A-中国大学mooc-试题题目及答案...
  7. zoj1095 Humble Numbers(DP)
  8. CVE-2015-1642 POC
  9. 马斯克调侃苹果145元“抹布” !网友补刀:779元的空酒瓶比天价“抹布”更迷惑...
  10. java asm methodvisitor 定义局部变量_Java ASM3学习(3)
  11. Spring IOC基础概念总结:何为控制?何为反转?控制了什么?反转了哪里?
  12. rust投递箱连接箱子_海门市围板箱定制围板箱内衬
  13. 乌班图apt添加阿里source
  14. springcloud微服务视频教程
  15. Linux串口编程select方式
  16. Windows10无法完成更新 正在撤销更改怎么解决转载
  17. vue中获取/操作组件中的dom元素
  18. 单项选择器radio-group
  19. Vert.x(vertx) 连接MySQL、Oracle数据库
  20. vue-element-admin 适合前端开发的后台管理系统模板

热门文章

  1. Android C/C++开发指南
  2. 1.1JAVA概述以及JDK的安装
  3. 推箱子游戏 —— 代码我来写
  4. Token流通量的变化能直接影响价格吗? | TokenInsight
  5. 谷粒商城-个人笔记(高级篇五)
  6. 维沃手机有没有智能机器人_vivo人工智能实战:智慧引擎竟如此给力
  7. 2022年 HSC-1th中MISC的DORAEMON
  8. siri中文语音助理_懒是第一生产力!萌新小白DIY智能语音(Siriamp;小爱)远程控制家庭影院方案...
  9. 程序员通病腰肌劳损,快速有效疗法--凳子小燕飞
  10. android 撒花动画,Android仿QQ聊天撒花特效 很真实