简介

express 是基于 nodeJs 的一个后台开发框架,它的特点在于 简洁,灵活,快速。提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具。使用 Express 可以快速地搭建一个完整功能的网站。

构建工程

准备工作

构建工程之前需要 全局下载 express npm i epxress -g 由于4.x版本把 generator 分离出来了,所以还要单独下载 generator npm i -g express-generator

下载完成后 查看环境 express --version,如果提示错误,则检查全局模块下载路径是否配置到环境变量当中

搭建项目

切换到工作目录下,使用 express [项目名] 来初始化一个项目

初始化完成后,切换进项目根目录,使用 npm install 下载依赖包

随后使用 npm start 即可运行

在 bin 目录下可以看到相关配置信息,例如端口是 3000

在浏览器中 输入 http://localhost:3000 即可访问

目录结构

bin

bin 目录下的 www文件中,存放着许多配置信息,这里为了简洁,直接删去bin目录,并将其中一些配置放置在app.js 中,这样运行项目 直接启动 app.js 即可

app.js ↓

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');

// 导入路由文件
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

// 创建express 实例
var app = express();


// 改写
var http = require('http');
var server = http.createServer(app);

//静态资源
app.use(express.static(path.join(__dirname, 'public')));

//允许post请求
app.use(express.urlencoded({extended:true}))
app.use(express.json())

// 允许cookie操作
app.use(cookieParser());

// 将路由文件挂载到实例
app.use('/', indexRouter);
app.use('/users', usersRouter);

server.listen('3000',()=>{
console.log('正在运行')
console.log('http://localhost:3000')
})

public

这个目录用于存放静态资源,如图片,脚本,样式,在app.js 中已经将此目录引用,所以可以直接通过地址调用此文件夹下的资源

http://localhost:3000/images/download.png

routes

这是存放路由配置相关的目录,初始化后我们可以看到 index于users 两个文件

index 顾名思义就是入口文件,所有接口都需要在 Index 中导出,例如此处,我创建了controllers文件夹,并根据不同接口创建不同文件进行管理,并在 index 中使用

index ↓

1
2
3
4
5
6
7
8
9
var express = require('express');
var router = express.Router();
var user = require('../controllers/userController')

/* GET home page. */
router.get('/', user.getUser);


module.exports = router;

在 routes目录下,除index之外的文件 作为子路由,其中的接口前面必须加上自己的前缀

例如,在routes下有了 users文件,其中有一个 /login 接口,我需要访问 http://localhost:3000/users/login

users ↓

1
2
3
4
5
6
7
8
9
10
11
12
var express = require('express');
var router = express.Router();
var User = require('../controllers/userController')


/* GET users listing. */
router.post('/sendCode',User.sendCode);

router.post('/login',User.codeToLogin)

module.exports = router;

util

这个目录一般由开发者自己创建,用于存放工具类,我这里创建了一个用于连接mysql的工具类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
const mysql = require('mysql')

module.exports = {

// 数据库配置
config:{
host:'localhost',
prot:'3306',
user:'root',
password:'123456',
database:'test'
},

// 连接数据库,选用mysql连接池的方式
// 连接池对象
sqlConnect:function(sql,sqlArr,callBack){
var pool = mysql.createPool(this.config)

pool.getConnection((err,conn)=>{
console.log('连接')
if(err){
console.log('连接失败')
return
}
// 事件驱动回调
conn.query(sql,sqlArr,callBack)

// 释放连接
conn.release()

})
}


}

controllers

这个目录一般由开发者自己创建,用于存放具体接口的实现,并暴露出去,在 routes/index 中引用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var dbConfig = require('../util/dbconfig')

// 获取用户
getUser = (req, res) => {
let sql1 = 'select * from user'
let sqlArr = []
let callBack = (err, data) => {
if (err) {
console.log('连接失败')
}
else {
res.send({
'list': data
})
}
}
dbConfig.sqlConnect(sql1, sqlArr, callBack)
}

module.exports = {
getUser,
}