2

これは app.js の私の設定です:

var express = require('express')
, routes = require('./routes')
, user = require('./routes/user')
, http = require('http')
, path = require('path')
, Server = mongo.Server
, Db = mongo.Db;
, mongo = require('mongodb');
, BSON = mongo.BSONPure;


var app = express();
var server = new Server('localhost', 27017, {auto_reconnect: true, });
var db = new Db('tasksdb', server); //i need to remove this "var" to access db in routes


db.open(function(err, db) {
if(!err) {
 console.log("Connected to 'tasksdb' database");
 db.collection('tasks', {safe:true}, function(err, collection) {
   if (err) {
     console.log("The 'tasks' collection doesn't exist. Creating it with sample data...");
     populateDB();
   }
 });
}
});

app.get('/', routes.index);
app.get('/tasks', routes.getAllTasks);

routes/index.js には次のものがあります。

exports.index = function(req, res){
  res.render('index', { title: 'Express' });
};

exports.getAllTasks = function (req, res) {

db.collection( 'tasks', function ( err, collection ){ //this "db" is not accessible unless i remove "var" from db in app.js

    collection.find().toArray( function ( err, items ) {

        res.send(items);

    })

})
};

もちろん、app.jsの「db」から「var」を削除しない限り機能しません。その後、グローバルになり、ルートでアクセスできますが、コードにグローバルは必要なく、移動したくありませんコントローラー アクションを app.js ファイルに追加します。それを修正する方法???

4

1 に答える 1

10

私は上手く理解できていない気がします。dbグローバルではありませんかvar(私にとってはグローバルスコープのように見えます)?その上、それをグローバルにしたくないのはなぜですか?これは、グローバルを使用する良い例です。

ただし、ファイル間で共有されることはありません。エクスポートに追加する必要があります。これを試して:

app.js

exports.db = db;

ルート/index.js

var db = require("app").db;

dbもう 1 つの方法は、次のようにすべてのハンドラーに追加することです。

app.js

app.use(function(req,res,next){
    req.db = db;
    next();
});
app.get('/', routes.index);
app.get('/tasks', routes.getAllTasks);

次に、として任意のルートで利用できるようにする必要がありますreq.db

于 2013-02-23T09:48:21.970 に答える