Node.js 如何调用express触发外部重定向并避免CORs
我试图通过ajax调用从前端触发一个express.js路由。一旦路由被调用,它将重定向到外部重定向到另一个域。每次我运行这条路线时,我都会遇到CORs飞行前错误 我认为理想的工作流应该是这样的:Node.js 如何调用express触发外部重定向并避免CORs,node.js,ajax,express,cors,shopify,Node.js,Ajax,Express,Cors,Shopify,我试图通过ajax调用从前端触发一个express.js路由。一旦路由被调用,它将重定向到外部重定向到另一个域。每次我运行这条路线时,我都会遇到CORs飞行前错误 我认为理想的工作流应该是这样的: 用户单击订阅按钮 一个AJAX(Jquery)调用被发送到express路线(app.get('/shopify/new charge') 这条快线通车 外部重定向被触发,用户被发送到另一个域 通过我的研究,我认为问题在于从后端到前端的反应 我已尝试实施以下措施: 修改AJAX调用 server.j
- 修改AJAX调用
- server.js中的npm CORS
- 向server.js添加标题
- 向ajax添加头文件
- 向重定向添加标题
- 向重定向添加状态(res.redirect(301),)
- 在res.redirect()之后添加next()
- 将原点和带有路线的原点列为白名单
activateSubscriptionButton.addEventListener('click', function () {
var newChargeUrl = "/shopify/new-charge;
$.ajax({
type: "GET",
url: newChargeUrl,
data: {"shop" : test.com},
success: function (result) {
console.log('Success - Paid');
},
error: function (jqXHR, exception) {
console.log('Error - No Paid');
console.log('jqXHR :', jqXHR);
},
});
}, false);
Express.js路线
app.get("/shopify/new-charge", function (req, res, next) {
const shop_domain = req.query.shop;
const shopRequestUrl = 'https://' + shop_domain + '/admin/api/2019-04/recurring_application_charges.json';
const newCharge = {
"recurring_application_charge": {
"name": "Professional Plan",//
"price": 4.99,
"return_url": forwardingAddress + "\/shopify\/billing\/activate?shop=" + encodeURIComponent(shop_domain),
"test": true,
}
};
request.post(shopRequestUrl,
{
headers: {
'X-Shopify-Access-Token': access_token,
},
json: newCharge
}, function (error, response, body) {
if (error) {
console.error('Error has occurred with charge: ', error);
return
}
else {
// Redirect User To External Confirmation Page//
res.redirect('https://external-url.com/');
}
})
else {
res.send('Error: No shop_domain.');
}
});
Server.js
var express = require("express");
var app = express();
var bodyParser = require("body-parser");
const forwardingAddress = process.env.ngrok_forwarding_address;
app.use(express.static("public"));
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(bodyParser.text());
require("./controllers/shopify")(app);
require("./controllers/billing")(app);
// Setting up port and requiring models for syncing
var PORT = process.env.PORT || 3000;
app.listen(PORT, function () {
console.log("Server listening on: http://localhost:" + PORT);
});
以下是我运行上述代码时收到的错误:
选项:404
CORS策略已阻止从源“”访问位于“”的XMLHttpRequest(从“”重定向):对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“Access-control-Allow_origin”标头
有没有办法通过修改上面介绍的现有代码来实现我的目标?您确实错过了Shopify的一个基本功能。对于您的应用程序,请在您的合作伙伴帐户中进入应用程序设置,并为该应用程序创建一个应用程序代理调用。您创建的端点就是您从前端使用你的JS代码.Shopify确保了安全性,所有CORS问题都消失了。这就是为什么应用程序代理存在的原因,它允许安全地对后端应用程序进行前端调用
TL:DR;您的前端模式注定失败,您应该重新考虑使用安全应用程序代理。您的代码没有显示任何试图访问的代码
https://external-url.com/
这显然是导致问题的URL。因此,我们看不出是什么代码导致了问题。这是在哪里发生的?t您显示的Ajax调用似乎是页面域的本地调用,而不是https://external-url.com/
@jfriend00我压缩了代码。现在,“”位于Express.js路由代码片段的底部。感谢您指出这一点。因此Ajax调用被重定向到另一个域???@epascarello我正在尝试使用Ajax调用端点,然后在端点的末尾,我希望它执行外部重定向。哈哈,谢谢David。你对Shopify的信息总是很有见解。因此,如果我将应用程序代理设置为“apps/new charge”,代理URL“”,那么我会在我的ajax调用中调用“apps/new charge”?研究应用程序代理。开始购买followi不会太多他们举了很多例子。