gpt4 book ai didi

javascript - NodeJS 我怎样才能让我的路线脱离中间件

转载 作者:行者123 更新时间:2023-12-02 16:09:41 24 4
gpt4 key购买 nike

我的 API 上有一些路由。并有一个中间件。它创建不记名 token 并检查它。但是我希望我的一些路由不要进入那个中间件,这样我就可以在没有 token 的情况下访问。我怎样才能做到?我的中间件:

  app.use(async (req, res, next) => {
if (
req.path === "/api/v1/collection/byhome" || // I dont want that part.
req.path === "/api/v1/user/login" // Its working but its not looks like best solution.
) {
next();
} else {
const bearerHeader = req.header("authorization");
if (typeof bearerHeader !== "undefined") {
const bearer = bearerHeader.split(" ");
const bearerToken = bearer[1];
req.token = bearerToken;

jwt.verify(req.token, process.env.SECRETKEY, async (err, authData) => {
if (err) {
res.sendStatus(401);
} else {
next();
}
});
} else {
res.statusCode = 400;
const Response = {
message: "Invalid Token",
StatusCode: res.statusCode,
};

res.json(Response);
}
}
});

我的路线:

app.get(
`/api/${version}/article/bycollection/:id`,
ArticleRoute.getbycollection
);

最佳答案

您的做法是正确的,您可以通过将所有您希望超出中间件范围的中间件组成一个数组来使您的代码更具可读性

const whiteListEndpoints = ["/api/v1/this", "/api/v1/this1", "/api/v1/this2"]

然后

// your middleware
app.use((req, res,next) => {
//if the path was in the whitelist just call next function
if(whiteListEndpoints.includes(req.url)) return next()

// let the middlware do it's job
})

或者您可以更改您的 express 使用订单

const firstRoute = app.use("/no_middleware", router);

app.use((req, res, next) => {}) // your middleware

const secondRoute = app.use("/with_middleware", router);

这里第一个路由器不会使用中间件,因为它还没有被调用。

关于javascript - NodeJS 我怎样才能让我的路线脱离中间件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68346847/

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