0

我正在研究一个非常大的节点项目,我想知道我当前要求文件然后在其中设置全局变量(可以在任何地方访问)的方法是一个好主意还是不安全。我想知道你们是否可以给我一些时间。

服务器.咖啡

#require and define all dependencies
require 'coffee-script'
GLOBAL.fs = require 'fs'
GLOBAL.crypto = require 'crypto'
GLOBAL.hound = require 'hound'
GLOBAL.async = require 'async'

require './config'
require './functions'

#define route
require './routes/index'
require './routes/login'
require './routes/editor'

#sockets
require './sockets/chat'

console.log "Listening"

配置.coffee

GLOBAL.express = require 'express'
GLOBAL.http = require 'http'
GLOBAL.ect = require 'ect'
GLOBAL.mysql = require 'mysql'
GLOBAL.sass = require 'connect-sass'
GLOBAL.coffeescript = require 'connect-coffee-script'
GLOBAL.SchemaObject = require 'node-schema-object'

GLOBAL.User = new SchemaObject
  id: Number,
  fullname: String,
  secret: String,
  email: String,
  lastOpened: Number

GLOBAL.ectRenderer = ect
  watch: true, 
  root: "#{__dirname}/views"

MemoryStore = express.session.MemoryStore
sessionStore = new MemoryStore()  
GLOBAL.app = express()
app.configure ->
  app.use(require('prerender-node'))
  app.use(coffeescript(src: "#{__dirname}/public"))
  app.use '/css/main.css', sass.serve("#{__dirname}/sass/main.scss")
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(express.cookieParser());
  app.use(express.session({secret: 'LOLLYU83rhf99fefru9d', store: sessionStore}));
  app.use express.static("#{__dirname}/public")

GLOBAL.server = http.createServer(app).listen(8080)
GLOBAL.io = require('socket.io').listen(server)

GLOBAL.connection = mysql.createConnection
  host: '.....',
  user: '.....',
  password: '.....',
  database: '.....'

connection.connect()

有一个更好的方法吗。我觉得我只是猜测并编造了这个。我希望一切都超级整洁。和快。

4

2 回答 2

0

抛弃所有全球性的东西。如果您需要app在内部闭包中可用(如configure),只需在那里使用它,它将可用。

在继续之前,请确保您很好地掌握了闭包,这篇 SO 帖子将有所帮助:JavaScript 闭包如何工作?.

如果您想知道如何布局 Express 应用程序(如文件所在的位置),请查看此 SO 帖子:express.js 示例应用程序

于 2013-10-17T16:20:10.683 回答
0

这个例子对我组织代码很有帮助。节点快递猫鼬演示

我没有看到使用全局变量对你有帮助,在需要的地方只需要你的模块似乎更好。

拥有全局变量会使事情变得更难维护,如果其他人必须维护您的代码则更是如此。拥有全局变量使得很难知道变量是什么以及它在哪里初始化(或何时)。随着应用程序的增长,很难知道代码的哪些部分依赖于所述变量,因此也很难替换。

经验法则,除非完全必要,否则应避免使用全局。

于 2017-01-24T22:23:28.170 回答