我正在運行一個獨立的腳本來處理我的Loopback應用程序中的一些持久數據。生產應用程序運行時,我需要在生產服務器上執行此操作。我有它的工作是這樣的:在Loopback.js中,如何在不運行應用程序的情況下運行獨立腳本?
filepath是./scripts/my-script.js
,看起來像這樣:
'use strict';
const app = require('../server/server');
const Account = app.models.Account;
Account.find()
.then(accounts => {
// do data stuff with accounts
})
.then(() => process.exit())
.catch(error => {
console.error(error.stack);
process.exit(1);
});
然後我跑node ./scripts/my-script.js
。
問題是包括Web服務器,啓動腳本等在內的整個應用程序在腳本運行期間運行,這意味着我將運行兩個應用程序實例。這是因爲我得到參考Account
模式是這樣的:
const app = require('../server/server');
const Account = app.models.Account;
當我嘗試:
const loopback = require('loopback');
const Account = loopback.getModel('Account');
它失敗:
./node_modules/loopback/lib/registry.js:304 throw new Error('Model not found: ' + modelName); ^
Error: Model not found: Account
我怎樣才能運行此腳本(或也許使用不同的方法)來操作持久數據而不運行應用程序的第二個實例?
感謝您的建議。我們的目標是通過腳本操作數據而不需要停機,並且不需要第二個應用程序實例。理想情況下,我不必添加應用程序代碼來執行此操作。 – guptron
如果您希望運行腳本時已經運行了您的應用程序,那麼您將有權訪問該應用程序實例的唯一方法是通過REST API。只要您使用另一個Node進程運行腳本,就無法訪問同一個應用程序實例。 如果是我,我會創建一個端點,並在被調用時觸發指定的腳本,並設置安全性,以便只有「管理員」角色才能訪問該端點。 – richardpringle
啊,我現在看到了。我可以將此端點設置爲接受'filename'參數,因此我只需修改一次實際應用程序即可添加端點。之後,我可以簡單地添加腳本,將它們推送到生產環境,然後按需求調用它們。很好的解決方法,謝謝 – guptron