我是 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 呼叫。我能想到的唯一選擇(不是自動的)是config.js使用檔案資源管理器/編輯器在 Google 平臺內手動維護一個帶有 cors 串列的全域 js 檔案(即),并將其作為一個類似的陣列進行迭代到process.env.customerList。這對我不起作用,因為我需要讓這一步自動發生。
任何和所有建議表示贊賞。
uj5u.com熱心網友回復:
解決方案:使用像 pm2 這樣的行程管理器來優雅地“重新加載”API,幾乎沒有停機時間。
PM2 重新加載可以以編程方式觸發。我創建了一個用于修改 CORS 串列的 PUT 端點,/cors/modify該串列在成功修改完成后發送了一個程式化的 pm2 訊息。
注意:在 Windows 作業系統上必須使用程式化訊息:
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);
})
}
}));
}
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/321826.html
