我正在使用node.js restify。
以下代码可以正常使用。
var server = restify.createServer({
name: 'myapp',
version: '1.0.0'
});
server.use(function (req, res, next) {
var users;
// if (/* some condition determining whether the resource requires authentication */) {
// return next();
// }
users = {
foo: {
id: 1,
password: 'bar'
}
};
// Ensure that user is not anonymous; and
// That user exists; and
// That user password matches the record in the database.
if (req.username == 'anonymous' || !users[req.username] || req.authorization.basic.password !== users[req.username].password) {
// Respond with { code: 'NotAuthorized', message: '' }
next(new restify.NotAuthorizedError());
} else {
next();
}
next();
});
我想要的是转换server.use(function (req, res, next) { ...
中的功能代码块,以便我可以用这样的方式调用函数server.use(verifyAuthorizedUser(req, res, next));
所以,我所做的就是创建这个功能;
function verifyAuthorizedUser(req, res, next)
{
var users;
// if (/* some condition determining whether the resource requires authentication */) {
// return next();
// }
users = {
foo: {
id: 1,
password: 'bar'
}
};
// Ensure that user is not anonymous; and
// That user exists; and
// That user password matches the record in the database.
if (req.username == 'anonymous' || !users[req.username] || req.authorization.basic.password !== users[req.username].password) {
// Respond with { code: 'NotAuthorized', message: '' }
next(new restify.NotAuthorizedError());
} else {
next();
}
next();
}//function verifyAuthorizedUser(req, res, next)
然后,我致电server.use(verifyAuthorizedUser(req, res, next));
。不幸的是,我遇到了这个错误ReferenceError: req is not defined
。
答案 0 :(得分:3)
你应该传递函数本身,而不是调用函数:
server.use(verifyAuthorizedUser);
编辑:更多详情:
verifyAuthorizedUser(req, res, next)
是函数verifyAuthorizedUser
的调用。它的值将是该函数的返回值。并且需要定义req
,res
和next
,而不是。{/ p>
你可以写:
server.use(function(req,res,next)
{
verifyAuthorizedUser(req, res, next);
});
但这只是在没有充分理由的情况下添加额外的代码。
server.use(verifyAuthorizedUser());
也是该功能的调用,您还有另外一个问题,即您没有将任何参数传递给期望某些功能的功能,因此它会显然是崩溃。某些函数(例如restify.queryParser
)可能会返回一个函数,在这种情况下,您可以调用第一个函数(使用()
)来获取要用作回调的函数。
答案 1 :(得分:1)
请尝试使用server.use(verifyAuthorizedUser)
。这个回调函数将传递所有参数。
答案 2 :(得分:1)