在我的Node / Express API中,为了保护我的路线,我是passport.authenticate
app.get('/', passport.authenticate('jwt', { session: false}), (req, res) => { //whatever })
我在这些路由上还有其他中间件,而且它变得相当长,并且我不想在所有路由器文件中都要求通行证,因此在一个单独的文件中,我在一个称为protect的现有身份验证对象上创建了另一种方法
const auth = {
protect() {}
}
这允许我这样做
app.get('/', auth.protect, (req, res) => { //whatever })
最初,我尝试返回passport.authenticate
行
const auth = {
protect() {
return passport.authenticate('jwt', { session: false})
}
}
但这无效
然后我将其包装在箭头函数中
const auth = {
protect() {
() => passport.authenticate('jwt', { session: false})
}
}
现在,当我在路线上致电auth.protect
时,它就可以正常工作。
另外,如果我只是导出箭头功能
export const protect = () => {
return passport.authenticate('jwt', { session: false})
}
当我在路线上致电protect
时,此方法也适用。
为什么我需要返回带有我要运行的代码的箭头函数,为什么当我在路线上调用函数时,第一个带有return的示例不起作用?
答案 0 :(得分:3)
第一个示例似乎返回函数执行的结果,第二个示例返回函数。
答案 1 :(得分:1)
Wktrf赚钱了。详细说明:app.get()需要两个参数,一个路径和一个回调函数。 http://expressjs.com/en/api.html#app.get
.container-fluid {
padding: 0em 10em;
}
.h1 {
margin-bottom: 35px;
box-shadow: 0 5px 5px -5px #333;
color: #70aeb6;
}
a.photo-container>img {
margin-bottom: 50px;
transition: transform .2s ease-in-out;
}
a.photo-container {
text-decoration: none;
position: relative;
display: inline-block;
}
a.photo-container:active>img {
transform: scale(1.4);
}
上面的返回passport.auth的结果。但是,需要一个函数作为app.get()的参数。
<!DOCTYPE html>
<html lang="es-MX">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="shortcut icon" type="image/png" href="https://via.placeholder.com/16x16" />
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<link rel="stylesheet" href="css/styles.css">
<title>Gallery</title>
</head>
<div class="container-fluid">
<div class="h1 text-center">
Classmates gallery
</div>
<div class="d-block">
<a href="#" class="photo-container">
<img src="https://via.placeholder.com/300x200">
</a>
<a href="#" class="photo-container">
<img src="https://via.placeholder.com/300x200">
</a>
<a href="#" class="photo-container">
<img src="https://via.placeholder.com/300x200">
</a>
<a href="#" class="photo-container">
<img src="https://via.placeholder.com/300x200">
</a>
<a href="#" class="photo-container">
<img src="https://via.placeholder.com/300x200">
</a>
<a href="#" class="photo-container">
<img src="https://via.placeholder.com/300x200">
</a>
<a href="#" class="photo-container">
<img src="https://via.placeholder.com/300x200">
</a>
<a href="#" class="photo-container">
<img src="https://via.placeholder.com/300x200">
</a>
</div>
</div>
</html>
第二个示例返回一个函数:const auth = {
protect() {
return passport.authenticate('jwt', { session: false})
}
}
然后可以使用哪个app.get()。
希望这会有所帮助。