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。