Попытка перенаправить на URL-адрес в следующем маршрутизаторе API JS вызывает у меня проблему с cors

#javascript #node.js #express #next.js #shopify

Вопрос:

Я пытаюсь перенаправить на URL-адрес shopify со следующего маршрута api JS, но это создает проблему с cors, я смог сделать это на стороне клиента, но мне нужно сделать это на стороне сервера, так как у меня есть токены.

Я попробовал следующее, но безрезультатно

 // Next.js API route support: https://nextjs.org/docs/api-routes/introduction
const { checkHmacValidity } = require("shopify-hmac-validation");

import Cors from "cors";
import initMiddleware from "../../lib/init-middleware";

// Initialize the cors middleware
const cors = initMiddleware(
  // You can read more about the available options here: https://github.com/expressjs/cors#configuration-options
  Cors({
    // Only allow requests with GET, POST and OPTIONS
    methods: ["GET", "POST", "OPTIONS"],
  })
);

export default async (req, res) => {
  await cors(req, res);

  console.log("req.body", req.body);

  const test = checkHmacValidity(process.env.SHOPIFY_SECRET, req.body.query);

  if (test) {
    const nonce = req.body.query.timestamp;

    res.redirect(
      `https://website.myshopify.com/admin/oauth/authorize?client_id=${process.env.SHOPIFY_TOKEN}amp;scope=write_orders,read_customersamp;redirect_uri=http://localhost:3000/shopifyConfirmamp;state=${nonce}amp;grant_options[]=per-user`
    );
  }
};
 

средняя посуда

 // Helper method to wait for a middleware to execute before continuing
// And to throw an error when an error happens in a middleware
export default function initMiddleware(middleware) {
  return (req, res) =>
    new Promise((resolve, reject) => {
      middleware(req, res, (result) => {
        if (result instanceof Error) {
          return reject(result);
        }
        return resolve(result);
      });
    });
}
 

запрос axios

 axios({
      method: "post",
      headers: { "content-type": "application/json" },
      url: "/api/shopifyEntry",
      data: {
        query: Router.query,
        nonce: nonce,
      },
    })
      .then(function (response) {
        // handle success
        console.log(response);
      })
      .catch(function (error) {
        // handle error
        console.log(error);
      });
  }, [Router]);
 

Комментарии:

1. Не отвечайте на вызовы API перенаправлениями HTTP. Вам нужно будет выполнить навигацию в интерфейсе, поэтому вместо этого попробуйте ответить с помощью URL

2. Точно. Если у вас возникают проблемы с CORS, вы делаете это неправильно!

3. О, хорошо, это имеет смысл, спасибо