• Stars
    star
    574
  • Rank 77,739 (Top 2 %)
  • Language
    JavaScript
  • Created almost 8 years ago
  • Updated almost 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

前后端分离

前后端分离示例

一个前后端分离的案例,前端 vuejs,后端 express, 数据库 mongodb。 使用 express 的提供api供前端调用,前端ajax请求进行对数据库的CURD操作。

前言

在学习前端开发的过程中了解到前后端分离这个概念 前后分离架构的探索之路 我们为什么要尝试前后端分离 因此决定小试身手,项目中主要使用到的框架和库.

vuejs vue-router muse-ui axios express mongoose mongodb......

效果图

首页 demo 添加电影 addMovie 更新电影信息 editMovie 展示电影详情 showDetail 删除电影 removeMovie

开发环境

需要本地安装node,npmyarn,mongodb

初始化

首先用vue-cli初始化项目目录

vue init webpack my-project

cd my-rpoject && npm install

npm run dev

看到8080端口出现vuejs的欢迎界面表示成功

接着把本地的mongodb服务跑起来,参考这篇教程

后端开发

首先把后端的服务搭好,方便以后前端调用,使用npm安装express,mongoose等必须的依赖即可,暂时不考虑验证等东西.

npm install express body-parser mongoose --save

然后在项目根目录添加一个app.js,编写好启动express服务器的代码

const express = require('express')
const app = express()
app.use('/',(req,res) => {
  res.send('Yo!')
})
app.listen(3000,() => {
    console.log('app listening on port 3000.')
})

使用nodemon或babel-watch,方便开发

npm install nodemon --save-dev

nodemon app.js

浏览器访问localhost:3000,出现res.send()的内容即表示成功.

然后添加需要的数据,新建一个models目录放数据模型,mongoose的每个数据model需要一个schema生成,

新建movie.js文件或者其他的数据模型,用来提供基础数据.

movie.js

定义了title,poster,rating,introduction,created_at,update_at几个基本信息,最后将model导出即可.

接着用mongoose链接mongodb,在app.js里添加

const mongoose = require('mongoose')
mongoose.connect('mongodb://localhost:27017/yourDbName')

链接数据库成功后,可以用Robomongo可视化工具或者在CMD里输入mongo命令查看数据库.

接着将对数据CURD操作的几个路由写出来,新建router文件夹,新建index.js和movie.js分别对应首页路由,和对数据

操作的路由,如下.

最后将路由应用到app.js

......
const index = require('./router/index')
const movie = require('./router/movie')
......
app.use('/',index)
app.use('/api',movie)
......

使用Postman进行测试,测试成功的话,后端服务基本上就完成了. 测试

前端开发

首先安装必要的依赖,看自己喜欢选择. muse-ui axios

npm install muse-ui axios --save

然后把不要的文件删除,在src/components目录新建主要的两个组件List,Detail. List就是首页的列表,Detail是电影的详细数据,然后把前端路由写出来,在src/router建立前端路由文件, 只有两个组件之间切换,然后把放到App.vue里面就可以了.

前端路由

index.js

数据获取,由于我们的express是在3000端口启动的,而前端开发在8080端口,由于跨域所以要配置好vue-cli的proxyTable 选项,位于config/index.js,改写proxyTable.

proxyTable

这样当在前端用axios访问 '/api' 的时候,就会被代理到 'http://localhost:3000/api',从而获得需要的数据.

能够获取到数据之后就是编写界面了,由于用了muse-ui组件库,所以只要按着文档写一般不会错,要是不满意就自己搭界面.

主要就是用ajax访问后端对数据增删改查的路由,将这些操作都写在组件的methods对象里面,写好主要的方法后,将方法

......

listMethods01 listMethods02

......

用vuejs里的写法,绑定到对应的按钮上

  @click="methodName"

methodBtn

这样前端的开发就基本完成了.

结语

前端开发完成后,就可以用webpack打包了,注意将config/index.js文件里面的productionSourceMap设为false, 不然打包出来文件很大,最后用express.static中间件将webpack打包好的项目目录'dist'作为express静态文件服务的目录.

npm run build

build

app.use(express.static('dist'))

最后案例完成后的目录结构就是这样.

project

Build Setup

# install dependencies
npm install

# serve with hot reload at localhost:8080
npm run dev

# build for production with minification
npm run build

# build for production and view the bundle analyzer report
npm run build --report

# 后端开发 localhost:3000
npm run server

# webpack打包后,后端运行express静态目录'dist'
npm run start

License

MIT

written by xrr2016,欢迎issue,fork,star.

More Repositories

1

hexo-theme-cold-stone

A simple, refreshing, text-based Hexo blog theme.
HTML
132
star
2

neumorphism

Dart
65
star
3

tata

简洁的toast提示
JavaScript
57
star
4

flutter-tree

Flutter tree widget
JavaScript
51
star
5

zhihu-daily

知乎日报(Vuejs)
CSS
45
star
6

cake-shop

电商网站项目
JavaScript
22
star
7

flutter-npm-search

flutter 实例项目
Dart
17
star
8

Interview-experience-share

15
star
9

flutter-charts

flutter charts
Dart
14
star
10

flutter-get-data

Dart
11
star
11

flutter-world

11
star
12

vue-img-filter

Vue
10
star
13

flutter-generative-artistry

Flutter generative artistry
Dart
10
star
14

javascript-functions

一些常用的js函数
JavaScript
9
star
15

wechatapp-choujiang

微信小程序转盘抽奖
JavaScript
8
star
16

my-gank.io

PWA gank.io
JavaScript
7
star
17

wechat-app-v2ex

微信小程序简易版V2EX
JavaScript
7
star
18

rematch-todos

React Rematch Todos Example
JavaScript
7
star
19

flutter-breadcrumb-menu

breadcrumb menu for flutter app
Dart
6
star
20

flutter_provider_todos

Dart
5
star
21

days-spent

JavaScript
3
star
22

lol-yuumi

CSS
3
star
23

feeling

Dart
3
star
24

javascript30

30 Day Vanilla JS Coding Challenge
HTML
3
star
25

learn-game-dev

学习HTML5游戏开发
HTML
3
star
26

wechatapp-doubandushu

微信小程序豆瓣读书
JavaScript
2
star
27

github-trending-api

TypeScript
2
star
28

vue-chat

使用 Vue.js 和 Chatkit 创建一个聊天室
Vue
2
star
29

flutter-effect-generator

An app for generate fun things, build with flutter.
Dart
2
star
30

koa2-mongodb-curd

koa2入门实例
JavaScript
2
star
31

animation-with-js

HTML
1
star
32

ast-learn

JavaScript
1
star
33

flutter_demos

实现 Flutter 应用开发基础功能
HTML
1
star
34

wasteagram

Dart
1
star
35

rest-api

Creating a REST API with Node.js
JavaScript
1
star
36

vue-caddy-test

HTML
1
star
37

juejin-markdown-theme-fancy

掘金自定义主题
SCSS
1
star
38

vue-json-editor

Vue
1
star
39

Vuejs-tutorial

学习vuejs
JavaScript
1
star
40

wechatapp-cnodejs

微信小程序cnodejs
JavaScript
1
star