Node.js / Express – 如何获取在path/ index.js app.js中定义的variables?

我是Node.js和Express的新手。

我如何访问“routes / index.js”中名为“pg”的“app.js”中创build的variables?

app.js

/** * Module dependencies. */ var express = require('express'); var routes = require('./routes'); var user = require('./routes/user'); var http = require('http'); var path = require('path'); var pg = require('pg'); var conString = "postgres://someuser:somepass@localhost/postgres" var app = express(); // all environments app.set('port', process.env.PORT || 3000); app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'jade'); app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.json()); app.use(express.urlencoded()); app.use(express.methodOverride()); app.use(app.router); app.use(express.static(path.join(__dirname, 'public'))); 

路线/ index.js

 /* * GET home page. */ exports.index = function(req, res){ var client = new pg.Client(conString); client.connect(function(err) { if(err) { return console.error('could not connect to postgres', err); } client.query('SELECT NOW() AS "theTime"', function(err, result) { if(err) { return console.error('error running query', err); } console.log(result.rows[0].theTime); //output: Tue Jan 15 2013 19:12:47 GMT-600 (CST) client.end(); }); }); 

我在浏览器中得到错误:

 Express 500 ReferenceError: pg is not defined 

你们能给我一个线索吗?

最好的祝福

       

网上收集的解决方案 "Node.js / Express – 如何获取在path/ index.js app.js中定义的variables?"

在Express中传递任何路由处理程序(不pipe它们是否在不同文件中声明)的简单方法是使用app.locals

 // app.js ... var app = express(); ... app.locals.someVar = someValue; ... // somewhere else module.exports.myhandler = function(req, res) { var someVar = req.app.locals.someVar; ... }; 
 // app.js var routes = require('./routes/index')({ varname: thevar }); ... ... 

 // /routes/index.js module.exports = function(options) { var moduleVar = options.varname; return { someMethod: function (req, res) { var i = moduleVar + 2; // etc}, anotherMethod: function (req, res) {} }; }; 

当我创build一个连接(或连接池)时,我这样做,只是想让我的模块有权访问分贝,而不必创build另一个连接。 所有这一切都取决于你的项目当然,我的命中追踪模块之一使用它自己的连接,所以我传递它的数据库信息,并从那里它是它自己的东西。 这使我有多个应用程序使用此跟踪器模块,而每个连接到自己的数据库。

您可以定义variables而不使用var关键字来使variables全局。