中间件
所谓中间件,就是在收到请求后和发送响应之前这个阶段执行的一些函数
中间件的结构
1、app.use([path],function)
path:是路由的url,默认参数‘/',意义是路由到这个路径时使用这个中间件
function:中间件函数
这个中间件函数可以理解为就是function(request,response,next)
这里安装是指涉及到第三方中间件的使用时,需要先安装好,然后在使用。cnpm i -g express-generator //安装
express --version //查看版本信息
一、应用级中间件
app.get("/one",(req,res,next)=>{
var flag=true;
if(flag){
next();//如果flag是true就执行下一个和它路径名相同的中间件 next()是查找下面紧邻的兄弟元素
}
else{
res.render("a",{
a:"aaaaaaaa"
});
}
})
app.get("/one",(req,res)=>{ //应用级的中间件
console.log("one middleware")
res.send("我是一个/one的中间件")
})
二、路由级中间件
router:
Express还提供了一个叫做Router的对象,行为很像中间件,你可以把Router直接传递给app.use,像使用中间件那样使用Router。另外你还可以使用router来处理针对GET、POST等的路由,也可以用它来添加中间件,总之你可以将Router看作一个微缩版的app。
创建一个router实例 var router = express.Router();
res.redirect("/路径") //重定向
hello.js
const express = require("express")//引入express框架
var app = express();//实例化 实例过程以及在内部封装好了可以直接用
const datarouter = require("./datarouter");//引入文件
const lxrouter = require("./lxrouter");
app.set("view engine","ejs")
app.set("views","./views")
app.use("/",datarouter);//当为 ”/“的时候引用datarouter里的代码
app.use("/lx",lxrouter);
var ser = app.listen(3000,()=>{
console.log("listen 3000...")
})
datarouter.js
const express = require("express");
const router = express.Router();
const data = require("./data");
const fs = require("fs");
const url = require("url");
router.get("/",(req,res)=>{
res.redirect("/two"); //重定向 可以不根据路由的规定来直接跳转页面
})
router.get("/thr",(req,res)=>{
res.render("b",{
list:data.list
})
})
router.get("/add*",(req,res)=>{
//接受用户传过来的值 用url模块
var obj = url.parse(req.url,true);
var name = obj.query.xm;
data.list.push({//接受用户传来的值
id:++data.count,
name:name
})
fs.writeFileSync("./data.json",JSON.stringify(data));//插入到文件当中去
res.render("b",{//重新渲染模板
list:data.list
})
})
module.exports =router;//把router甩出去
lxrouter.js
const express=require("express")
const router = express.Router();
const data = require("./data");
router.get("/one",(req,res,next)=>{//路由 第一个参数就是我要向其中传递数据的url
var flag=true;
if(flag){
next();
}else{
res.render("a",{
title:"aaaaa"
})//渲染页面
}
})
router.get("/one",(req,res)=>{
console.log("这是二个中间件")
res.send("耶耶耶")
})
module.exports =router;//把router甩出去
ps:hello.js datarouter.js lxrouter.js 需要放在同一目录下
三、express生成项目
方法:
①cnpm i express-generator -g //安装 必须全局安装
②express --version //查看版本号 确认安装完成
③选定文件夹 进入之后 express --view=ejs 文件名(app2) //创建文件夹
④cd app2 //进入app2
⑤cnpm i //安装依赖
⑥npm start //生成项目
express.static() 中间件
app.use(express.static(path.join(__dirname,"jt"))); //静态资源服务器 可以创建一个名为jt的文件夹 在这个文件夹中可以直接写静态资源.png .css等 不需要写别的代码引入静态资源的类型之后再用