我正在尝试为Node.js上的Express做一个非常简单的Basic Auth中间件,如下所示: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');
});
这也有相同的结果。
答案 0 :(得分:0)
function(request, response, callback) {
VS
next();
您应该将callback
更改为next
或反之亦然。
答案 1 :(得分:0)