簡體   English   中英

Node.js:在調用腳本中訪問數據庫

[英]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.set僅可用於內部設置。

您可以改用app.locals.db東西,也可以只設置app.db

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM