微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何基于 http req 方法运行 next.js 中间件功能?就像为“POST”请求而不是为“GET”调用中间件函数一样

如何解决如何基于 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 举报,一经查实,本站将立刻删除。