一.什么是Express?
Express是最流行的Node框架,是许多其他流行 Node框架的底层库
1.Express框架核心特性
可以设置中间件来响应HTTP请求
定义了路由表用于执行不同的HTTP请求动作
可以通过向模板传递参数来动态渲染HTML页面。
二.安装express
1.express 肯定基于在node 环境中安装,我们可以通过终端输入npm -v
来查看我们是否安装了node环境
2.通过终端来安装express框架(全局下安装)
1、npm install -g express
2、npm install -g express-generator
三.express创建项目
1.express项目名
2.执行完毕后终端会出现步骤,按照下面的步骤依次执行
执行完之后会在本地文件夹中创建好项目
- 文件
app.js : 是工程的配置文件
bin : 创建服务器的文件夹
node_modules :是安装node后用来存放包管理器,下载安装包的文件夹
public : 把所有的静态资源(html或者css之类的) 指定放置到入口文件
routes : 路由,储存数据
views : 是创建express项目自带的jade文件
3.通过终端安装热更新
在终端输入npm install nodemon
安装好之后,找到package.json文件,将start下的node改为 nodemon
4.通过终端安装模板引擎(使用jade就不用安装,这里使用的是html)
npm install express-art-template
安装好以后需要更改在文件夹中的名字
4.1 首先得找到app.js,在设置模板引擎前引入引擎(view enginer setup(视图引擎设置))
4.2 在设置模板引擎中的jade改为html
5.启动项目
npm start
6.查看项目
- 输入本地路径,端口号为3000
在浏览器输入127.0。0.1:3000
创建数据库,mvc流程
- 一.mvc组成:由model、view、controller组成
1.model: 负责跟数据库映射(一个变量映射一个表)关系的操作数据库
2.view:前端页面的渲染(也叫视图层)
3.controller: 控制层,富足对数据库进行处理,前端给后端发送的请求(req)和后端给前端发送的响应(res)都要在controller层处理
最终由API创建路径,同时调用controller层的方法,完成整个接口开发
- 二. mvc中文件的关系
1.一个model文件对应一个server文件
2.一个server文件对应一个controller文件
3.一个controller文件对应一个API文件
4.这些文件名都要保持一致,方便维护
7.在当前项目中创建一个config文件夹,用来建立数据库
- 创建database.js文件
database.js 文件导出的是一个对象,对象中包含着所有跟数据库有关的参数
//导出
module.exports={
database : 'data', //数据库名
username:'root', //数据库用户名
password:' ', //数据库密码,没有设置就是为空
dialect :'mysql', //数据库
host:'localhost', // 数据库主机名
port:'3306',//数据库端口号,//数据库端口号 navicat中是多少就写多少,如果被占用可以更改(3000-9000)
timezone:'+08:00';//中国时区//因为中国事件采用东八时区的
}
//pool 数据库连接池,减少数据库压力
pool : {
max : 10,
min: 0,
acquire :
}
在当前项目中,通过终端安装sequelize模块
8.我可以在pages文件夹创建一个page.html。可以通过这个文件夹赖家成html模板,方便我们写代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="stylesheets/style.css">
<link rel="stylesheet" href="stylesheets/{{file}}.css">
{{block 'head'}}{{/block}}
</head>
<body>
{{block 'content'}}{{/block}}
</body>
<script src="javascripts/{{file}}.js"></script>
</html>
-
在路由的文件中设置file
file这一条键值对是当前页面下所说的css 和 js的文件名
- 在其他页面中继承page.html
{{extend './page.html '}}//extend 继承
{{block 'content'}}
<h1>这里继承了page中的模板</h1>
{{/block}}
9.在当前项目中创建model 文件夹,用来映射数据表
-
创建index.js
1.sequelize 模块,并解析出Sequelize和 Datatypes
2.导出数据库设置模块(config/database)
3.实例化数据库对象
4.引入数据库
5.更新数据库
6.导出数据表
//引入sequelize模块
let {Sequelize,DataTypes} = require('sequelize');
//引入数据库设置 (require 引入)
let db = require ('../config/database');
//实例化数据库对象
let sequelize = new Sequelize(db);
//引入数据表
let user = require('../user')(sequelize,DataTypes);
//更新数据库
sequelize.sync()';
//导出数据表
module.exports = {
user,
}
-
创建数据表文件user.js
-
设置数据表
1.文件名跟数据表名保持一致,此文件导出的是一个方法
2.每一个字段都是一个对象,字段名就是这个对象的key
3.设置id,需要设置主键和主键自动递增
//直接返回一个方法
module.exports = (sequelize, DataTypes) => sequelize.define('user', {
//sequelize.define() 是sequelize插件对数据表的映射方法
//第一个参数是表名
//第二个参数是表字段的设置
//每一个字段都是一个对象,字段名就是这个对象的key
user_id: {
type: DataTypes.INTEGER(11), //设置字段数据类型
allowNull: false, //不允许为空
primaryKey : true, //设置主键
autoIncrement : true, //设置主键自动递增
},
username:{
type: DataTypes.STRING, //设置字段数据类型
allowNull: false, //不允许为空
unique : true, //设置唯一性
},
password : {
type: DataTypes.STRING, //设置字段数据类型
allowNull: false, //不允许为空
},
phone : {
type: DataTypes.STRING, //设置字段数据类型
allowNull: false, //不允许为空
unique : true, //设置唯一性
},
});
10.在当前项目创建server文件夹,用来操作数据表
引入model表的映射
设置添加用户的方法
1.方法中,会将前端发送过来的数据(req.body/req.query)发送给数据库,并将数据库返回的信息发送给前端(以回调函数的形式)
第一个参数是前端发送过来的数据
第二个参数是回调函数
req代表请求
1.post 请求使用req.body 来接收
2.get 请求使用req.query
res代表响应
3.如果数据添加成功,temp会接收到一个返回值(成功信息)
4.把所有数据库的操作方法以对象的形式导出
-
创建user.js文件
//引入model表的映射
let model = require('../model'); //index可以省略不写,其他的不可以省略
//声明一个变量 接收user表
let user = model.user;
//添加用户的方法
function addUser(obj,callback){
let temp = user.create({
username : obj.username,
password : obj.password,
phone : obj.phone,
});
// 如果数据添加成功,temp会接收到一个返回值(成功信息)
//如果失败,temp不会接收到任何东西
var data;
if(temp){
//成功
data = {
msg : 'success',
code : 1,
}
}else{
//失败
data = {
msg : 'error',
code : 0,
}
}
callback(data);
}
module.exports = {
addUser,
}
11.在当前项目创建 controller 文件夹,用来做前后端交互,数据处理
引入server表的操作
设置添加用户的数据处理
在定义的数据处理方法中调用
- server方法中第一个参数req.body / req.query
2.server 方法中第二个参数,回调函数,在回调函数中以res.send() 向前端发送数据server方法。
将所有的数据处理方法以对象的形式导出
-
创建suer.js文件
//交互,数据处理 server => contorller
//引入 server表的操作
let user = require('../server/user');
//添加用户的数据处理
function c_addUser(req,res){
user.addUser(req.body,function(data){
res.send(data);
})
}
module.exports = {
c_addUser,
}
12.在当前项目中创建 api 文件夹 这是一个接口
api是传给前端
引入controller控制器
设置添加用户API
使用express 中的路由模块来设置api路径
使用router 中 get /post方法 定义api 路径和请求方法
导出路由模块 router
找到app.js文件,在里面设置引入API、挂载API
1.引入API
//引入API
var userApi = require('./api/user');
2.API挂载
//API 挂载
app.use('/userapi,userApi')
-
创建user.js文件
//接口 controller => api
//api 传给前端
var express = require('express');
var router = express.Router( );
var express = require('express');
var router = express.Router ( );
//引入controller 控制器
let user = require(' ../controller/user');
//设置添加用户ApI
router.post('./add',user.c_addUser);
module.exports = router
13.最后在使用终端,在本项目中安装mysql2依赖,然后启动项目
npm install mysql2
npm start
以上就是创建一个express项目的完整步骤
express 是一个经典的mvc架构
-
这是所有express创建好的所有文件夹目录
-
整个过程
前端 => Api => controller = > server = > model => 后端
四. 测试接口
写好接口之后要进行测试,看是否可以正常使用
通过浏览器的插件进行测试(apizza)
1.点击发送进行测试,如果接口可以使用,则返回成功,(这是自定义的返回方法的返回值)
2.点击发送进行测试,如果接口不可以使用,则会返回失败
3.然后可以看到数据库中可以查看我们新建的数据表