express框架

作者: 光明程辉 | 来源:发表于2021-05-17 22:55 被阅读0次

    Express 是一个基于 Node.js 封装的上层服务框架,它提供了更简洁的 API 更实用的新功能。它通过中间件和路由让程序的组织管理变的更加容易。

    如果需要跟加进一步的了解建议去 express官网看。没时间写那么详细,我只是把自己之前学习的一些笔记简单记录下来,如果有问题可以找我探讨。
    使用:

    1.下载 安装 npm install express --save
    2.引入
    3.创建一个server
    4.监听
    5.get(二级-三级。。。地址,function(req,res){})
    .post(二级-三级。。。地址,function(req,res){})
    .use(二级-三级,function(req,res){});
    require('url');
    on('data');
    on('end')

    中间件

    作用是拓展功能、处理数据(便捷)

    const express = require('express');
    const server = express();
    
    server.listen(1273);
    server.use(function(req,res,next){
        console.log('你好我是user01');
        next();
    });
    server.use(function(req,res,){
      console.log('你好我是user02');
    })
    

    上面是运行结果是:你好我是user01 --> 你好我是user02

    因为使用了 next() ,这个中间件。

    在express中 GET、POST的参数解析等也是可以使用方便的第三方的处理(上篇说到ajax的封装中就讲过了怎么实现和封装)。

    express-static 读取输出

    var express = require('express');
    var bodyParser = require('body-parser');//解析body,尤其是复杂的对象参数
    var static = require('express-static'); // 中间件(托管静态文件)
    var server = express();
    
    server.listen(1767);
    server.use(bodyParser.urlencoded({}));
    server.use('/user',function(req,res,next){
    
        console.log(req.body);
            // body 是POST请求
        if(req.body.user == 'Anny' && req.body.pass =='123456'){
            res.send('ok')
        }
        else{
            res.send('no ok!');
        }
        //res.send({a:10});
        //next();
    });
    
    server.use(static('./www')); // www目录下的图片、CSS 文件、JavaScript 文件对外开放访问了
    

    如果wwww 文件里面有文件就可以直接读取出来。

    • next();
      表示,如果下面还有其它的中间件,就执行,否则就不执行。
    app.use('',function (res,req) {
        console.log("我是user01");
        //next(); // 如果不使用next,返回的结果是 : 我是user01
    });
    app.use('',function (res,req) {
        console.log("我是user02");
    });
    
    

    如果使用了 next() 。输出是:我是user01 我是user02

    如果是get的数据,直接使用 req.query 解析就OK了。

    默认解析了,直接使用。
    
    • 插件 body-parser ,解析body参数
    const express = require('express');
    const bodyParser = require('body-parser');
    const static = require('express-static');
    const multer = require('multer');// 专门用来解析上传文件的
    const server = express();
    
    server.listen(3000);
    server.use(bodyParser.urlencoded({})); // 通中间件,解析body参数
    server.use(multer({dest:'地址值'}).any()); // 可以上传任意的文件
    
    • multer 专门用来解析上传文件的(需要添加条件)
      multer的 dest 默认解析出来是哈希值,没有后缀。
      需要 使用中间件 path 解析。path.parse() 解析返回的是一个对象(文件名和后缀都有)

    {root:'/',dir:'' ,base:'xxx.docx', ext: '.docx', name:''}
    {root是 在什么根目录,dir是 绝对路径 ,base是 文件名+后缀,ext是 后缀,name是 什么文件名}

    server.use('/user',function(req,res,next){
        console.log(req.body); //查看解析后的body参数
        if(req.body.user == 'xiaoming' && req.body.pass =='123456'){
            res.send('ok')
        }
        else{
            res.send('no ok!');
        }
        //res.send({a:10});
        //res.write();
        //res.end();
        //next();
    });
    server.use(static('./www')); // 能改变文件地址
    
    • express-static
      能改变文件地址
      利用中间件
      如果有这个文件就读出来显示 www

    • res.end();响应

    var express = require('express');
    var app = express();
    
    // 一个简单的 logger
    app.use(function(req, res, next){
      console.log('%s %s', req.method, req.url);
      next();
    });
    
    // 响应
    app.use(function(req, res, next){
      res.send('Hello World');
    });
    
    app.listen(3000);
    
    • router 路由
      路由使用非常频繁,它的作用就是帮助大家把目录结构分的更加的详细。下面举个例子:
    const express = require('express');
    
    // 初始化
    const userRouter = express.Router();
    const newsRouter = express.Router();
    
    const app = express();
    app.listen(3000);
    
    app.use('/user',userRouter); // 这里 "/user" 表示把大模块拆分成小模块了。
    app.use('/news',newsRouter);
    
    // 小服务
    userRouter.use('/xiaoming',function(req,res){
      res.send('user 小明!')
    })
    userRouter.use('/test',function(req,res){
      res.send('哈哈哈,测试test!')
    })
    newsRouter.use('/newsTest',function(req,res){
      res.send('渲染新闻')
    })
    
    // 这是没有拆分模块化的做法,不推荐
    //app.use('www.baidu.com/news/xxxx',function(){});
    //app.use('www.baidu.com/list/xxxx',function(){});
    //app.use('www.baidu.com/users/xxxx',function(){});
    ...
    

    在浏览器输入的基础路径+/user/xiaoming -----> 结果是: “user 小明!”
    在浏览器输入的基础路径+/user/test -----> 结果是: “哈哈哈,测试test!”

    下篇:cookie及cookie加密

    相关文章

      网友评论

        本文标题:express框架

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