中间件 express生成项目(2018/11/10)

中间件
             所谓中间件,就是在收到请求后和发送响应之前这个阶段执行的一些函数
中间件的结构
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等 不需要写别的代码引入静态资源的类型之后再用 
原文地址:https://www.cnblogs.com/zsrTaki/p/11510342.html