Express

作者: zhchhhemmm | 来源:发表于2020-01-05 13:28 被阅读0次
    中间件

    中间件就是一堆方法,可以接受客户端发来的请求、可以对请求作出响应,也可以将请求交给下一个中间件处理
    中间件有两部分构成:中间件方法以及请求处理函数。
    如果想用多个中间件处理同一个请求,可以采用next方法

    app.use()
    不区分请求方式
    用处:
    1 可以放在最前面,作为网站公告(如:告知用户,网站正在维护)
    2 可以放在最后,当做404页面,当所有的路由都没有匹配上时
    res.status(状态码),用于更改状态码

    错误处理中间件:
    常见错误:磁盘读取失败,数据库连接失败等

    app.use((err,req,res,next)=>{
        res.status(500).send('服务器发生未知错误')
    })
    
    async的异步函数,需要使用try...catch
    
    
    模块化路由
    const express = require('express')
    const app = express()
    const home = require('./home')
    const admin = require('./admin')
    app.use('/home',home)
    app.use('/admin',admin)
    
    
    
    app.listen(3000);
    
    /```````````````
    const express = require('express')
    const home = express.Router()
    home.get('/index',(req,res,next)=>{
         res.send("home/index")
     })
     module.exports = home
    /
    const express = require('express')
    const admin = express.Router()
     admin.get('/index',(req,res,next)=>{
         res.send("admin/index")
     })
     module.exports = admin
    
    
    请求参数

    j接受get的请求参数:
    req.query
    接收post请求参数:
    用到一个第三方包 : body-parser
    const bodyParser = require('body-parser');
    app.use( bodyParser.urlencoded({extended:false}) )

    然后,就可以用req.body拿到post请求参数了

    express路由参数
    app.get('/index/:id',(req,res)=>{})
    localhost:3000/index/123

    静态资源处理

    express.static(资源路径)

    模板引擎

    art-template在express中进一步封装为了:
    express-art-template
    express-art-template与art-template需要同时下载

    使用方法
    app.engine('art',require('express-art-template'));
    设置模板存放目录
    app.set('views',path.join(__dirname,'views'));
    渲染模板时不写后缀,默认拼接art后缀
    app.set('view engine','art')
    这样,就可以使用res.render(index,传递的数据)方法
    
    app.locals对象,

    可以用于存放公共数据,所有的模板都可以直接拿到

    公共数据,需要在多个模板中使用的,单纯的用render传递数据给一个模板页显然不可靠,
    比如,我们有个地方要显示当前用户名,多个模板都是它的子模板,我们登陆成功后单单把数据渲染给某一个模板是不行的,,这时我们需要把这些公共的数据放到req.app.locals里,比如我们要把当前登陆的用户名放到公共区域:

    req.app.locals.userInfo = user
    //此时我们就给app.locals添加了一个属性userInfo,用来存储相应的公共数据
    

    在模板中使用数据:
    直接用{{ userInfo.userName }}就可以拿到当前登陆的用户名

    登陆拦截

    如果用户没有登陆,直接在路由中输入了相应的地址,是可以访问页面的,这显然不科学

    解决方法:
    express中间件,拦截请求(中间件要写在路由之前),进行判断.


    image.png
    格式化验证请求参数

    Joi模块
    JavaScript对象的规则描述语言和验证器


    image.png

    相关文章

      网友评论

          本文标题:Express

          本文链接:https://www.haomeiwen.com/subject/prmqactx.html