如何将 CORS 站点动态添加到 Google Cloud App Engine 节点 API
How to dynamically add CORS sites to Google Cloud App Engine Node API
我是 API 部署的新手。
我有一个 Node Express API,它在根 app.js 中启用了 CORS,用于 API 和 socket.io 实现:
var app = express();
app.use(cors({
origin : ["http://localhost:8080", "http://localhost:8081"],
credentials: true
}))
和
const httpServer = createServer(app);
const io = new Server(httpServer, {
cors: {
origin: ["http://localhost:8080", "http://localhost:8081"],
credentials: true,
methods: ["GET"]
}
});
我将建立一个销售网站,允许客户支付许可以在他们的网站上使用 API,即 https://www.customersite.com
我的问题是如何将客户的网站(比如在他们从另一个站点提交表单后)动态添加到 CORS 列表中? 理想情况下是通过 API 呼叫。我能想到的唯一选择(不是自动的)是使用文件浏览器/编辑器从 Google 平台中手动维护一个全局 js 文件(即 config.js
)和 cors 列表,并将其作为类似于 process.env.customerList
的数组进行迭代。这对我不起作用,因为我需要自动执行此步骤。
感谢任何和所有建议。
解决方案: 使用像 pm2 这样的进程管理器来 'reload' API 优雅地 API 几乎没有停机时间。
PM2 重新加载可以通过编程方式触发。我创建了一个用于修改 CORS 列表的 PUT 端点 /cors/modify
,它在成功完成修改后发送了一条编程式 pm2 消息。
注意:在Windows OS 上必须使用编程消息传递:
pm2.list(function(err, list) {
pm2.sendDataToProcessId(list[0].pm2_env.pm_id,
{
type : 'process:msg',
data : {
msg : 'shutdown'
},
topic: true
},
function(err, res) {
console.log(err);
pm2.disconnect(); // Disconnects from PM2
}
);
if (err) {
console.log(err);
pm2.disconnect(); // Disconnects from PM2
}
});
然后可以用
捕获
process.on('message', async function(msg) {
if (msg == "shutdown" || msg.data.msg == 'shutdown') {
console.log("Disconnecting from DB...");
mongoose.disconnect((e => {
if (e) {
process.exit(1)
} else {
console.log("Mongoose connection removed");
httpServer.close((err) => {
if (err) {
console.error(err)
process.exit(1)
}
process.exit(0);
})
}
}));
}
});
我是 API 部署的新手。
我有一个 Node Express API,它在根 app.js 中启用了 CORS,用于 API 和 socket.io 实现:
var app = express();
app.use(cors({
origin : ["http://localhost:8080", "http://localhost:8081"],
credentials: true
}))
和
const httpServer = createServer(app);
const io = new Server(httpServer, {
cors: {
origin: ["http://localhost:8080", "http://localhost:8081"],
credentials: true,
methods: ["GET"]
}
});
我将建立一个销售网站,允许客户支付许可以在他们的网站上使用 API,即 https://www.customersite.com
我的问题是如何将客户的网站(比如在他们从另一个站点提交表单后)动态添加到 CORS 列表中? 理想情况下是通过 API 呼叫。我能想到的唯一选择(不是自动的)是使用文件浏览器/编辑器从 Google 平台中手动维护一个全局 js 文件(即 config.js
)和 cors 列表,并将其作为类似于 process.env.customerList
的数组进行迭代。这对我不起作用,因为我需要自动执行此步骤。
感谢任何和所有建议。
解决方案: 使用像 pm2 这样的进程管理器来 'reload' API 优雅地 API 几乎没有停机时间。
PM2 重新加载可以通过编程方式触发。我创建了一个用于修改 CORS 列表的 PUT 端点 /cors/modify
,它在成功完成修改后发送了一条编程式 pm2 消息。
注意:在Windows OS 上必须使用编程消息传递:
pm2.list(function(err, list) {
pm2.sendDataToProcessId(list[0].pm2_env.pm_id,
{
type : 'process:msg',
data : {
msg : 'shutdown'
},
topic: true
},
function(err, res) {
console.log(err);
pm2.disconnect(); // Disconnects from PM2
}
);
if (err) {
console.log(err);
pm2.disconnect(); // Disconnects from PM2
}
});
然后可以用
捕获process.on('message', async function(msg) {
if (msg == "shutdown" || msg.data.msg == 'shutdown') {
console.log("Disconnecting from DB...");
mongoose.disconnect((e => {
if (e) {
process.exit(1)
} else {
console.log("Mongoose connection removed");
httpServer.close((err) => {
if (err) {
console.error(err)
process.exit(1)
}
process.exit(0);
})
}
}));
}
});