簡體   English   中英

如何在node.js Express 2.5.5中的單獨路由文件中訪問主app.js中聲明的變量?

[英]How to access variables declared in main app.js in separate route files in node.js Express 2.5.5?

我剛開始使用Express(2.5.5)的新版本,默認情況下會創建一個./routes目錄以及./views./public

在路由內部有一個index.js文件,其中包含:

/*
 * GET home page.
 */

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

默認情況下(從命令行運行express之后),這是主app.js的routes部分:

// Routes

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

我在主app.js為redis客戶端設置了一個變量:

var redis = require('redis'),
    db = redis.createClient();

我想知道如何在./routes包含的文件中訪問db (以及我在app.jsrequire其他模塊)的./routes

我真的很喜歡Jamund的解決方案,但我會將這個概念擴展到:

// db.js
var redis = require('redis');
module.exports = redis.createClient();

// index.js
var db = require(.'/db')

// whatever other file
var db = require(.'/db')
// do something with db
db.disconnect();

db on index和其他文件都將獲得redis客戶端的相同實例

只需在文件頂部調用即可。 需要位於共享空間中,因此您可以多次重新請求該文件,並且它將始終引用相同的版本。 如果你想要花哨,你可以創建自己的db模塊,做類似的事情,以防止雙重創建客戶端:

// db.js
var db 
var redis = require('redis')
exports.connect = function() {
  if (!db) db = redis.createClient()
  return db
}

exports.disconnect = function() {
  redis.quit()
  db = null
}


// index.js
var dbHelper = require(.'/db')
var db = dbHelper.connect()

// whatever other file
var dbHelper = require(.'/db')
var db = dbHelper.connect() // won't connect twice

您可以創建全局應用程序並掛起要共享的變量,也可以在路徑文件中使用初始化程序功能

FE

// app.js

var app = express.createServer()
  , db = require('redis').createClient();

require('./routes').with(app, db);

// routes.js
module.exports.with = function(app, db) {
  app.get('/',function(r,s) { s.end('Sweet');});
}

暫無
暫無

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

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