【发布时间】:2023-03-25 18:16:01
【问题描述】:
我有一个 Express JS 代码,我在其中加载了一个在路由器上定义某些端点的中间件。端点特定于用户登录和注销。我正在添加一个新的身份验证,在这种情况下,我会从不同的服务接收我的身份验证令牌。当我从其他服务收到令牌时,我不希望加载这些端点。
这是我的 server.js 文件
let app = express();
const authEndpoints = require('auth'); // this defines router endpoints
const alreadyAuth = require('checkHeaders'); // this middleware checks if request
// already has the auth headers and set res.locals.alreadyAuthenticated to true else false
app.use('/', alreadyAuth);
app.use('/',function(req, res, next) {
if(res.locals.alreadyAuthenticated === false)
next();
else {
console.log('authentication already exists skipping authEndpoints loading');
next('route');
}
}, authEndpoints); // login, logout
//continue here
app.use('/',nextMiddleware);
auth.js 文件
'use strict';
const express = require('express');
const path = require('path');
const router = express.Router();
router.get('/login', (req, res) => {
// some code
res.sendFile('login.html');
}
router.get('/logout', (req, res) => {
// some code
});
module.exports = router;
我看到控制台日志打印“身份验证已存在跳过 authEndpoints 加载”,但端点 /login 和 /logout 仍然可以访问。
当我评论整个部分时
app.use('/',function(req, res, next) {
if(res.locals.alreadyAuthenticated === false)
next();
else {
console.log('authentication already exists skipping authEndpoints loading');
next('route');
}
}, authEndpoints); // login, logout
那么端点没有被加载。
有人可以澄清一下,如果这不是应该使用 next('route') 的方式。
【问题讨论】:
标签: javascript node.js express