Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 访问routes中的app.js变量,但不访问global express_Node.js_Express - Fatal编程技术网

Node.js 访问routes中的app.js变量,但不访问global express

Node.js 访问routes中的app.js变量,但不访问global express,node.js,express,Node.js,Express,这是我在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.

这是我在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文件中。如何修复它

我不太明白。
db
是否是全局的,有无
var
(对我来说,它看起来像是一个全局范围)?此外,你为什么不希望它是全球性的?这是使用globals的一个很好的例子

但它不会在文件之间共享。您必须将其添加到导出中。试试这个:

app.js

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

exports.db = db;
var db = require("app").db;
app.use(function(req,res,next){
    req.db = db;
    next();
});
app.get('/', routes.index);
app.get('/tasks', routes.getAllTasks);
另一种方法是向每个处理程序添加
db
,如下所示:

app.js

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

然后,它应该在任何路由中都可用,如
req.db

当它使用var时,它实际上是文件的全局性的,当我删除它时,它变成全局性的,并且对所有文件都可用。感谢您的帮助-效果很好:)如何从routes/index.js获取任何对象//app.js const app=express()const routes=require('./routes)app.use('/',routes)app.set('anyObj',{})//routes/index.js const express=require('express')const router=express.router()const users=require('./users')router.use('/api/users',users)