前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >读书笔记-《了不起的nodejs》-connect内置中间件

读书笔记-《了不起的nodejs》-connect内置中间件

作者头像
用户3258338
发布2019-07-19 18:37:00
4610
发布2019-07-19 18:37:00
举报
文章被收录于专栏:女程序员的日常_Lin

享受独处时光

周末的下雨天,这个光线刚刚好,一整天不出门简直太酥服~

connect内置中间件

Static中间件

挂载

?:让/my-images URL和名为/images的目录对应起来

代码语言:javascript
复制
server.use('/my-images' , connect.static('/path/to/images'));

maxAge

?:给文件设置缓存时效

代码语言:javascript
复制
server.use('/js' , connect.static('/path/to/bundles'
,{ maxAge : 100000000000}));

hidden

给如果是true,connect就会托管那些以(.)开始的UNIX文件系统中被认为是隐藏的文件。

代码语言:javascript
复制
server.use(connect.static('/path/to/resources'
,{ hidden : true}));

query中间件

使用query中间件,能够通过req.query对象自动获取地址上带的查询字符串:

挂载

?:url /blog-post?page=5

代码语言:javascript
复制
server.use(connect.query);
server.use(function(req,res){
  // req.query.page = 5
})

logger中间件

logger中间件能将发送进来的请求信息和发送出去的响应信息打印到终端

它提供了四种日志格式:default、dev、short、tiny。

代码语言:javascript
复制
var connect = require('connect');
connect.createServer(
  connect.logger('dev'),
  function(req,res){
    res.writeHead(200);
    res.end('Hello world')
  }
).listen(3000)

在终端执行:node index.js,然后在浏览器访问127.0.0.1:3000,终端:

dev是一种精准简短的日志格式,提供了行为方式及性能方面的信息。

body parse中间件

bodyParse功能类似物http模块的例子中我们使用qs解析请求的消息体;

?:处理上传

代码语言:javascript
复制
var server = connect(
  connect.bodyParse(),
  connect.static('static');  
)

在static/文件夹中,创建一个index.html:

代码语言:javascript
复制
<form action="/" method="POST" enctype="multipart/form-data">
  <input type="file"/>
  <button>Send File!</button>
</form>

Session(会话)

会话系统,主要通过在浏览器中设置cookie来实现,该cookie信息随后在所有的请求信息中被带回到服务器。

connect也提供了简单的实现方式,我们创建一个简单的登录系统:

代码语言:javascript
复制

// 模块依赖
var connect = require('connect'),
users = require('./users');
var server = connect(
    connect.logger('dev'),
    connect.bodyParser(),
    // session中间件需要操作cookie,所以在这里引入cookieParser中间件
    connect.cookieParser(),
    connect.session({secret : 'my all secret'}),
    // 出于安全考录,在初始化session中间件的时候需要提供secret选项
    // 将车用户是否登录,若已登录展示欢迎,若未登录则交给其他中间件
    function(req,res,next){
        if('/'==req.url && req.session.logged_in){
            res.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});
            res.end(
                '欢迎 <b>'+req.session.name + '</b>回来!' 
                + '<a href="/logout"></a>'
            );
        }else{
            next();
        }
    },
    // 若用户未登录,切请求地址是’/‘,则展示表单
    function(req,res,next){
        if('/'==req.url && 'GET'== req.method){
            res.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});
            res.end([
                '<form action="/login" method="POST">',
                '<fieldset>',
                '<legend>请登录</legend>',
                '<p>用户名:<input type="text" name="user"/></p>',
                '<p>密码:<input type="password" name="password"/></p>',
                '<button>登录</button>',
                '</fieldset>',
                '</form>'
            ].join(''))
        }else{
            next();
        }
    },
    // 当提交表单时,若用户名密码错误则展示错误,否则展示成功
    function(req,res,next){
        if('/login'==req.url && 'POST'== req.method){
            res.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});
            if(!users[req.body.user] || req.body.password != users[req.body.user].password){
                res.end('<p>用户名或密码错误<p>')
            }else{
                // 在这里修改req.session对象,该对象在响应发出去时自动保存,无须手动处理
                req.session.logged_in = true;
                req.session.name = users[req.body.user].name;
                res.end('<p>登陆成功<p>');
            }
            
        }else{
            next();
        }
    },
    // 若请求logout,则登出
    function(req,res,next){
        if('/logout'==req.url){
            req.session.logged_in = false;
            res.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});
            res.end('<p>已退出<p>');
        }else{
            next();
        }
    },
);

server.listen(3000);

然后创建json:

代码语言:javascript
复制
{
    "Lin":{
        "password":"123456",
        "name":"Lin"
    }
}

然后在终端执行:node login.js,在浏览器访问localhost:3000

输入用户名密码:

点击登录后:

再去访问localhost:3000:

访问localhost:3000/logout退出:

若输入错误密码:

呜呼,各位宝宝们,是不是还挺好玩的,咱们前端也能搞自己的服务器。这个简单的登录系统还凑合哈。你千万别手懒哈,一起来coding啊!

愿我们有能力不向生活缴械投降---Lin

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 女程序员的日常 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
日志服务
日志服务(Cloud Log Service,CLS)是腾讯云提供的一站式日志服务平台,提供了从日志采集、日志存储到日志检索,图表分析、监控告警、日志投递等多项服务,协助用户通过日志来解决业务运维、服务监控、日志审计等场景问题。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档