sách gpt4 ai đã đi

cú pháp javascript khi thực hiện passport nodejs

In lại 作者:行者123 更新时间:2023-12-02 14:27:41 25 4
mua khóa gpt4 Nike

我有一个关于 JavaScript 语法的问题。实际上,我在自学 MEAN 堆栈教程时想出了编码(https://thinkster.io/mean-stack-tutorial#adding-authentication-via-passport)。下面有一个非常奇怪的编码。

})(req, res, next);

(req, res, next) 似乎是参数,但没有函数利用该参数。也许我现在还不够聪明,所以我看不到它。有没有人可以帮助我解决这个问题?谢谢。

router.post('/login', function(req, res, next){
if(!req.body.username || !req.body.password){
return res.status(400).json({message: 'Please fill out all fields'});
}

passport.authenticate('local', function(err, user, info){
if(err){ return next(err); }

if(user){
return res.json({token: user.generateJWT()});
} khác {
return res.status(401).json(info);
}
})(req, res, next);
});

1 Câu trả lời

要了解发生了什么,您应该知道 Express 中的“中间件”是什么。这是一个可以传递给 Express 的函数,它会传递一个请求对象、一个响应对象和一个下一个函数:

function middleware(req, res, next) {
...
}

使用中间件,您可以“利用”HTTP 请求通过 Express 应用程序所遵循的路径,并执行某些操作。

您可能已经注意到中间件函数签名看起来很像您的示例代码:

router.post('/login', function(req, res, next) { ... });

这是一个路由处理程序,针对发送到 /login của BƯU KIỆN 请求而调用。路由处理程序与中间件类似,因为它们使用相同的参数进行调用,并且还执行某些操作(通常,Kế tiếp 不会在路由处理程序中使用,但它仍然会作为参数传递) .

您也可以“堆叠”中间件:

router.post('/login',
function (req, res, next) { ... }, // first middleware
function (req, res, next) { ... }, // second middleware
...
);

Đây là Kế tiếp 发挥作用的地方:如果第一个中间件对请求不感兴趣,它可以调用 Kế tiếp (这是一个函数)和请求将被传递给第二个中间件(如果该中间件对此不感兴趣,它也可以调用 Kế tiếp ,将请求沿着应用程序中的所有中间件传递,直到中间件处理该请求或它失败,生成 404 错误,因为没有找到可以处理请求的中间件)。

passport.authenticate() 还返回一个中间件函数。通常这样使用:

router.post('/login',
passport.authenticate(...),
function (req, res, next) { ... }
);

这意味着,如果您查看堆栈示例,passport.authenticate() 应该返回一个接受三个参数 req,res 的函数code> 和 Kế tiếp (事实上,确实如此)。

这意味着上面的代码可以重写为:

router.post('/login', function(req, res, next) {
passport.authenticate(...)(req, res, next);
});

这与您问题中的代码相匹配。 Tại sao您想要调用passport.authenticate(),就像这是一个相对高级的 Passport 主题。

biên tập:从广义上讲,这就是passport.authentication的样子:

// a function that mimics what `passport.authenticate` does:
function myAuthenticate() {
return function (req, res, next) {
...some stuff...
Kế tiếp();
};
}

这是一个返回函数的函数。您可以像这样使用它:

router.post('/login',
myAuthenticate(),
function (req, res, next) {
...
}
);

这(几乎)与此相同:

router.post('/login',
function(req, res, next) { // <-- this is the function that got returned!
...some stuff...
Kế tiếp();
},
function(req, res, next) {
...
}
);

关于做 Passport nodejs时的javascript语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38085927/

25 4 0
Bài viết được đề xuất: haskell - F#有多路if吗?
Bài viết được đề xuất: windows - 无法通过 SSH 连接到 Azure Windows Server VM
Bài viết được đề xuất: accelerometer - 如何识别 Microsoft Band 手势
Bài viết được đề xuất: linux - 本地/远程服务器中相同文件上的不同md5sum
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com