如何解决如何基于 http req 方法运行 next.js 中间件功能?就像为“POST”请求而不是为“GET”调用中间件函数一样
我对 next.js 完全陌生。我在这里试图实现的是停止在某些 http req 方法上运行中间件。我的代码看起来像这样
import connectDB from "../../../connectDB";
import Posts from "../../../models/Posts";
import checkAuthorization from "../../../middlewares/checkAuthorization";
const handler = async (req,res) => {
connectDB();
if (req.method === "POST") {
const { title,description,creator } = req.body;
const newPost = await Posts.create({
creator,title,likes: [],comments: [],createdAt: new Date(),});
res.status(200).json({ newPost });
} else if (req.method === "GET") {
const allPosts = await Posts.find({});
res.status(200).json({ allPosts });
} else {
res.status(500).json({ msg: "This http request method is not supported." });
}
};
export default checkAuthorization (handler);
checkAuthorization 函数正在检查用户是否已通过身份验证。使用上面的代码,所有 req 方法都会调用该函数。但我不想为“GET”方法调用 checkAuthorization 函数。 这是 checkAuthorization 函数的样子
const jwt = require("jsonwebtoken");
const checkAuthorization = (handler) => {
return async (req,res) => {
if (
req.method === "POST" ||
req.method === "PUT" ||
req.method === "DELETE"
) {
const token = req.headers.authorization.split(" ")[1];
if (token) {
jwt.verify(
token,process.env.PRIVATEKEY,async function (err,authorized) {
req.userId = authorized.userId;
if (err) {
res.status(400).json({ msg: "Invalid token." });
}
}
);
}
}
return handler(req,res);
};
};
export default checkAuthorization;
至于现在,我已经写了很多 if else 语句来得到我想要的。但我知道这不是一个好的做法,必须有更好的方法。 有什么想法吗??
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。