关于 express 中间件踩坑记

       Express4.x版本相对于3. x进行了很大的改变,其中4不再依赖内置的中间件,需要自己添加中间件;当学习的教程和自己本地安装的版本没有同步时,哈哈,就这样不知不觉掉坑里了。
     basicAuth:登录验证中间件,网站添加身份认证功能,使用该中间件后,用户访问网站必须输入用户名和密码并通过难后才能访问网站。
 
1 var express = require('express');
2 var app = express;
3  app.use(express.basicAuth({name:'testuser',password:'password'}));
4 app.get('/',function (req,res) {
5     res.send('你好');
6 
7  });
8  app.listen(1342,'127.0.0.1')

首先,刚开始的时候是这样用的中间件,运行报错是第三行的代码:

 然后查了下原因说是版本更新没有内置的中间件,需自己加载,安装加载后,你以为能用use方法直接使用?呵呵,各种报错,报错信息就不一一贴出来了,并且官网对4.x给出的中间件列表没有这个中间件

按着报错信息一路改呀改,终于写成这样可以了:

var express = require('express');
var app = express();

var basicAuth = require('basic-auth');


var auth = function(req, res, next) {
    function unauthorized(res) {
        res.set('WWW-Authenticate', 'Basic realm=Input User&Password');
        return res.sendStatus(401);
    }

    var user = basicAuth(req);

    if (!user || !user.name || !user.pass) {
        return unauthorized(res);
    }

    if (user.name === 'User11' && user.pass === 'Password') {
        return next();
    } else {
        return unauthorized(res);
    }
};

app.get('/auth', auth, function(req, res) {
    res.send('nihao')
});

app.listen(1024,'127.0.0.1');

 

看下效果图:

 

登录后:

代码解析:当用户输错用户名及密码时返回401 Unauthorized,应答中包含一个WWW-Authenticate头,浏览器据此显示用户名字/密码对话框,引导用户填写合适Authorization头后再次发出请求。
basicAuth(req)将从req.headers.authorization中解析出用户输入的用户名和密码,然后设置用户认证的链接及对该链接下路径使用basicAuth中间件
app.get('/auth', auth, function(req, res) {
res.send('nihao')
});
最后,访问http://localhost:1024/auth链接将需要输入身份信息进行认证。
 
关于中间件的安装:npm install serve-favicon morgan method-override express-session body-parser multer errorhandler express@latest jade@latest —save
 
1.不需要加载 app.router,它不再是一个合法的 Express 4 对象,删掉 app.use(app.router);。

2.确保加载中间件的顺序正确,加载完应用路由后再加载 errorHandler。

 

 

转载于:https://www.cnblogs.com/minna123/p/7204397.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值