#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. О, хорошо, это имеет смысл, спасибо