我正在尝试在 Node.js 上为 Express 做一个非常简单的基本身份验证中间件,如下所示:http: //node-js.ru/3-writing-express-middleware
我有我的中间件功能:
var basicAuth = function(request, response, next) {
if (request.headers.authorization && request.headers.authorization.search('Basic ') === 0) {
// Get the username and password
var requestHeader = new Buffer(
request.headers.authorization.split(' ')[1], 'base64').toString();
requestHeader = requestHeader.split(":");
var username = requestHeader[0];
var password = requestHeader[1];
// This is an async that queries the database for the correct credentials
authenticateUser(username, password, function(authenticated) {
if (authenticated) {
next();
} else {
response.send('Authentication required', 401);
}
});
} else {
response.send('Authentication required', 401);
}
};
我有我的路线:
app.get('/user/', basicAuth, function(request, response) {
response.writeHead(200);
response.end('Okay');
});
如果我尝试卷曲这个请求,我会得到:
curl -X GET http://localhost/user/ --user user:password
Cannot GET /user/
当我在调用 createServer() 时添加中间件时,这非常酷,但是当我像在这条路线中一样按请求执行时,它只是在服务器端安静地死掉。不幸的是,由于并非所有请求都需要身份验证,因此我无法将其设为全局中间件。
我尝试关闭 Express 并仅使用 Connect 并得到相同的结果,所以我认为它在那里。以前有人经历过吗?
编辑:我还应该提到我已经详尽地记录了相关代码,并且正在调用下一个,但它似乎无处可去。
编辑 2:作为记录,“空”中间件也默默地失败:
var func = function(request, response, next) {
next();
};
app.get('/user', func, function(request, response) {
response.writeHead(200);
response.end('Okay');
});
这也有同样的结果。