express 模块介绍
❝express
express 模块搭建服务器
❝app.js
//1 导入express模块
const express = require('express');
//导入所有路由处理函数
const { fnGoodsList } = require('./controller/goods');
const { fnLogin } = require('./controller/users');
//2. 创建服务
const app = express();
//配置静态目录
app.use(express.static('./www'));
//配置路由
//get请求
app.get('/goods/list',fnGoodsList)
//post请求
app.post('/users/login',fnLogin);
// 监听端口
app.listen(8080,() => {
console.log('服务已开启');
})
❝www/views/index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<link rel="stylesheet" href="/css/index.css">
</head>
<body>
<h1>我是首页</h1>
<script src="/js/index.js"></script>
</body>
</html>
❝www/css/index.css
body{
background-color: skyblue;
}
❝www/js/index.js
console.log('hello node!');
fn1();
function fn1(){
let xhr = new XMLHttpRequest();
xhr.open('get','/goods/list?current=1&pagesize=12');
xhr.onload = function(){
let res = JSON.parse(xhr.responseText);
console.log(res);
}
xhr.send();
}
fn2();
function fn2(){
let xhr = new XMLHttpRequest();
xhr.open('post','/users/login');
xhr.onload = function(){
let res = JSON.parse(xhr.responseText);
console.log(res);
}
xhr.setRequestHeader('content-type','application/x-www-form-urlencoded');
xhr.send('us=李四&ps=456');
}
❝controller/goods.js
//存放所有商品相关的路由处理函数
function fnGoodsList(req,res){
res.send({code: 1,msg: '接收get请求成功',params: req.query});
}
//导出
exports.fnGoodsList = fnGoodsList;
❝controller/users.js
//存放所有用户相关路由处理函数
function fnLogin(req,res){
res.send({
code: 1,
msg: '成功,但是还没有解析请求体,参数暂时不能带回'
})
}
exports.fnLogin = fnLogin;
express 模块路由及路由表配置
❝app.js
//1 导入express模块
const express = require('express');
//导入路由表
// const GoodsRouter = require('./router/goods');
// const UserRouter = require('./router/users');
// const CartRouter = require('./router/cart');
const Router = require('./router/index');
//2. 创建服务
const app = express();
//配置静态目录
app.use(express.static('./www'));
//配置路由
// app.use('/goods',GoodsRouter);
// app.use('/users',UserRouter);
// app.use('/cart',CartRouter);
app.use('/api',Router);
// 监听端口
app.listen(8080,() => {
console.log('服务已开启');
})
❝www : 同上
❝controller/goods.js
//存放所有商品相关的路由处理函数
function fnGoodsList(req,res){
res.send({code: 1,msg: '接收get请求成功',params: req.query});
}
function fnDetail(req,res){
res.send({code: 1,msg: '获取商品详情成功'});
}
function fnCartList(req,res){
res.send({code: 1,msg: '获取购物车列表成功',list: [{},{},{},{}]})
}
//导出
exports.fnDetail = fnDetail;
exports.fnGoodsList = fnGoodsList;
exports.fnCartList = fnCartList;
❝controller/users.js
//存放所有用户相关路由处理函数
function fnLogin(req,res){
res.send({
code: 1,
msg: '成功,但是还没有解析请求体,参数暂时不能带回'
})
}
function fnRegister(req,res){
res.send({
code: 1,
msg: '用户注册'
})
}
exports.fnLogin = fnLogin;
exports.fnRegister = fnRegister;
❝router/goods.js
//路由分表
const goodsRouter = require('express').Router();
const { fnGoodsList } = require('../controller/goods');
//配置路由
goodsRouter.get('/list',fnGoodsList);
//导出路由
module.exports = goodsRouter;
❝router/users.js
//路由分表
const userRouter = require('express').Router();
//导入路由处理函数
const { fnLogin,fnRegister } = require('../controller/users');
//添加路由
userRouter.post('/login',fnLogin);
userRouter.post('/register',fnRegister);
//导出路由
module.exports = userRouter;
❝router/cart.js
//1. 导入模块
const cartRouter = require('express').Router();
//导入路由处理函数
const { fnCartList } = require('../controller/goods');
//配置路由
cartRouter.get('/list',fnCartList);
//导出路由
module.exports = cartRouter;
❝router/index.js
//路由总表
const router = require('express').Router();
//添加路由
router.use('/goods',require('./goods'));
router.use('/users',require('./users'));
router.use('/cart',require('./cart'));
//导出路由总表
module.exports = router;
express 模块中间件
-
内置中间件 static
-
自定义中间件(全局、局部)
-
第三方中间件 (body-parser) 注 : 中间件使用,一定注意 next
❝app.js
//1. 导入模块
const express = require('express');
const fs = require('fs');
//导入路由总表
const router = require('./router');
//2. 创建服务
const app = express();
//3. 配置静态资源(静态中间件)
app.use(express.static('./www'));
//4. 配置路由
//全局中间件
app.use(function(req,res,next){
//将当前请求的地址记录下来
fs.appendFile('./info.txt',`
${new Date()} ---- ${req.url} \n
`,(err) => {});
next();
})
app.use('/api',router);
//5. 监听端口
app.listen(8080,() => {
console.log('server ok,port: 8080');
})
❝controller/goods/js
//存放所有商品相关的路由处理函数
function fnGoodsList(req,res){
let { current,pagesize } = req.query;
res.send({code: 1,msg: '获取商品列表成功',info: `你需要获取的是第${current}页数据,一页显示${pagesize}条`});
}
function fnDetail(req,res){
res.send({code: 1,msg: '获取商品详情成功'});
}
function fnCartList(req,res){
res.send({code: 1,msg: '获取购物车列表成功',list: [{},{},{},{}]})
}
//导出
exports.fnDetail = fnDetail;
exports.fnGoodsList = fnGoodsList;
exports.fnCartList = fnCartList;
❝middleware/goods.js
//goods相关接口使用的中间件
exports.testGetList = (req,res,next) => {
const { current,pagesize } = req.query;
//验证
if(!current && pagesize){
res.send({code: 0,msg: '参数current或pagesize没有传递'});
return;
}
if(isNaN(current) || isNaN(pagesize)){
res.send({code: 0,msg: '参数格式不对,current或pagesize必须是一个数字'});
return;
}
next();
}
❝router/index.js
const Router = require('express').Router();
Router.use('/goods',require('./goods'));
Router.use('/users',require('./users'));
Router.use('/cart',require('./cart'));
module.exports = Router;
❝router/goods.js
//存放goods相关路由信息
//导入路由处理函数
const { fnGoodsList,fnDetail } = require('../controller/goods');
//导入相关中间件
const { testGetList } = require('../middleware/goods');
//1. 导入express创建路由表
const express = require('express');
let GoodsRouter = express.Router();
//2. 在路由表上添加路由
GoodsRouter.get('/list',testGetList,fnGoodsList);
GoodsRouter.get('/detail',fnDetail);
//3. 导出路由表
module.exports = GoodsRouter;
❝router/cart.js
const { fnCartList } = require('../controller/goods');
const CartRouter = require('express').Router();
//添加一个中间件
CartRouter.use((req,res,next) => {
//进行token验证
const token = req.headers.authorization;
if(!token){
res.send({code: 0,msg: 'token错误'});
return;
}
next();
})
CartRouter.get('/list',fnCartList);
module.exports = CartRouter;
解析请求体的中间件
❝app.js
//1. 导入模块
const express = require('express');
const fs = require('fs');
const bodyParser = require('body-parser');
//导入路由总表
const router = require('./router');
//2. 创建服务
const app = express();
//3. 配置静态资源(静态中间件)
app.use(express.static('./www'));
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
app.use(bodyParser.json())
//4. 配置路由
//全局中间件
app.use(function(req,res,next){
//将当前请求的地址记录下来
fs.appendFile('./info.txt',`
${new Date()} ---- ${req.url} \n
`,(err) => {});
next();
})
app.use('/api',router);
//5. 监听端口
app.listen(8080,() => {
console.log('server ok,port: 8080');
})
❝controller/users.js
const express = require('express');
//存放所有用户相关路由处理函数
function fnLogin(req,res){
const { us,ps } = req.body;
if(!(us && ps)){
res.send({
code: 0,
msg: '参数不够'
})
return;
}
res.send({
code: 1,
msg: '成功',
info: {
us,
ps
}
})
}
function fnRegister(req,res){
res.send({
code: 1,
msg: '用户注册'
})
}
exports.fnLogin = fnLogin;
exports.fnRegister = fnRegister;