gpt4 book ai didi

javascript - 简化这个 node.js 函数的调用方式

转载 作者:行者123 更新时间:2023-11-30 08:33:36 24 4
gpt4 key购买 nike

我正在使用 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

最佳答案

您应该传递函数本身,而不是对函数的调用:

server.use(verifyAuthorizedUser);

编辑:更多细节:

  • verifyAuthorizedUser(req, res, next) 是对函数 verifyAuthorizedUser调用。它的值将是该函数的返回值。并且需要定义 reqresnext,但它们不是。

  • 你可以这样写:

    server.use(function(req,res,next)
    {
    verifyAuthorizedUser(req, res, next);
    });

但这只是无缘无故地添加额外的代码。

  • server.use(verifyAuthorizedUser()); 也是对该函数的调用,您还有一个额外的问题,即您没有将任何参数传递给期待一些的功能,所以它显然会崩溃。

一些函数(例如restify.queryParser)可能会返回一个函数,在这种情况下,您将调用第一个函数(使用())来获取函数用作回调。

关于javascript - 简化这个 node.js 函数的调用方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34413306/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com