# 1.路由模块化
# 定义模块路由文件 route/admin.js
const express = require('express');
const admin = express.Router();
admin.get('/index',(req,res,next)=>{
res.send({
'admin':1
});
})
module.exports=admin
# app.js中引用模块路由 app.js
const express = require('express');
const app = express();
app.use('/admin',require('./route/admin'));
app.use('/home',require('./route/home'));
......
# 2.请求参数
# 获取请求头
req.headers
# GET参数获取
请求url:
http://localhost:3000/index?
username=zhangsan&password=123
var { username,password } = req.query
# POST参数获取
const bodyParser = require('body-parser');
app.use(bodyParser.urlencode({extended:false}))
var { username,password } = req.body
# 3.中间件
# 3.1 中间件的应用:
- 1.路由保护[登录session校验]
- 2.维护公告
- 3.自定义404页面(将该中间件设置到最后面)
- 4.错误处理中间件
# 注意:可在模块路由中使用,也可以在app.js使用,模块中使用的表示针对模块生效,app.js中使用表示所有模块都会生效,需要放在路由的最前面,否则无法生效
# 3.2 使用
# app.js使用
app.use((req,res,next)=>{
console.log(1111);
if(){
}else{
next();
}
})
# 模块路由使用
const express = require('express');
const admin = express.Router();
admin.use((req,res,next)=>{
if(){
}else{
next();
}
})
# 错误处理中间件
app.use((error,req,res,next)=>{ ... })
//当程序出现异常时会调用该中间件
1.如果函数是异步的api,例如fs。readFile等,需要在回调函数中使用next(error)来触发调用错误中间件
2.如果是async/await的则需要通过try/catch捕获异常后在catch中使用next(error)触发异常中间件
# 中间件传递参数
# 1.req.xxx 赋值
# 2.app.set(key,value)
app.set('ssoHostname','xxxxx');
var value=app.settings.ssoHostname;
# 4.响应数据
# 4.1 设置响应头
res.append('fuck', 'you')
注意点:需在res.send之前调用
# 4.2 提供附件下载
admin.get('/download',function (req,res) {
res.download('files/1.txt','模板.txt',function (err) {
if(err){
console.log(err)
}else{
//res.send('ok')
}
})
})
说明
path:要下在的文件所在的路径,以项目为相对路径
filename:文件下载后的名字,浏览器显示的名字
fn:回调函数
# 4.3 设置状态码和响应体
res.status(200|404|500).send(json|string|array)
# 4.4重定向
# res.redirect(301, 'http://example.com')
# 5.session## session的支持
# 1.依赖express-session第三方模块
# 2.代码
const session = require('express-session')
//app.js中开启session的支持
app.use(session({
secret:'secret key', //secretkey设置加密key
saveUninitialized:false, //false未设置时不设置cookie
cookie:{
maxAge:24*60*60*&1000 //一天有效期
}
})) //这一步后就会在req上添加session的值
//setCookie动作
req.session.name='123'
退出:
req.session.destroy(function(){
res.clearCookie('connect.sid');
res.redirect('/login')
})

# 6.开放静态资源
app.use(express.static([static,]path.join(__dirname,'public')))
//表示在该目录下的所有文件都可以直接访问
pm2工具 →