[英]Node.js: Access db in called script
我有一個heroku Scheduler作業,該作業每10分鍾運行一次,並調用文件expiration.js。 該文件位於app.js旁邊的根文件夾中。
expiration.js:
var app = require('./app.js');
function checkForExpiration() {
var db = app.get('db');
var collection = db.collection('postingcollection');
// do stuff with collection that checks for expiration
}
checkForExpiration();
在我的app.js文件中,我有:
app = express();
//setup db with mongolab
app.set('db', db);
module.exports = app;
您可能會認為我沒有正確設置數據庫,但是它在我的路線中的其他所有地方都可以使用。 我只是無法在此執行的文件中訪問它。 當文件運行時,我看到此錯誤:
2016-01-02T22:09:27.924443+00:00 heroku[api]: Starting process with command `node expiration` by scheduler@addons.heroku.com
2016-01-02T22:09:32.028186+00:00 heroku[scheduler.5884]: Starting process with command `node expiration`
2016-01-02T22:09:32.700417+00:00 heroku[scheduler.5884]: State changed from starting to up
2016-01-02T22:09:34.312517+00:00 app[scheduler.5884]: Failed to load c++ bson extension, using pure JS version
2016-01-02T22:09:35.154509+00:00 app[scheduler.5884]: /app/expiration.js:6
2016-01-02T22:09:35.154513+00:00 app[scheduler.5884]: var collection = db.collection('postingcollection');
2016-01-02T22:09:35.154514+00:00 app[scheduler.5884]: ^
2016-01-02T22:09:35.154515+00:00 app[scheduler.5884]:
2016-01-02T22:09:35.154516+00:00 app[scheduler.5884]: TypeError: Cannot read property 'collection' of undefined
2016-01-02T22:09:35.154516+00:00 app[scheduler.5884]: at checkForExpiration (/app/expiration.js:6:22)
2016-01-02T22:09:35.154517+00:00 app[scheduler.5884]: at Object.<anonymous> (/app/expiration.js:52:1)
2016-01-02T22:09:35.154518+00:00 app[scheduler.5884]: at Module._compile (module.js:425:26)
2016-01-02T22:09:35.154519+00:00 app[scheduler.5884]: at Object.Module._extensions..js (module.js:432:10)
2016-01-02T22:09:35.154520+00:00 app[scheduler.5884]: at Module.load (module.js:356:32)
2016-01-02T22:09:35.154521+00:00 app[scheduler.5884]: at Function.Module._load (module.js:313:12)
2016-01-02T22:09:35.154521+00:00 app[scheduler.5884]: at Function.Module.runMain (module.js:457:10)
2016-01-02T22:09:35.154522+00:00 app[scheduler.5884]: at startup (node.js:138:18)
2016-01-02T22:09:35.154523+00:00 app[scheduler.5884]: at node.js:974:3
看起來var db是未定義的,因此不是數據庫。
我的問題是如何在此可執行腳本中訪問應用程序的數據庫?
您可以改用app.locals.db
東西,也可以只設置app.db
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.