构建工程
准备工作
构建工程之前需要 全局下载 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 ↓
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 ↓
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 ↓
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的工具类
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 中引用
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,
}