我正在研究一个非常大的节点项目,我想知道我当前需要文件然后在其中设置全局变量的方法(随处可访问)是一个好主意还是不安全。我想知道你们是否可以给我一些时间。
Server.Coffee
#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"
config.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()
有更好的方法来做到这一点。我觉得我已经猜到并做了这件事。我希望一切都超级整洁。而且很快。
答案 0 :(得分:0)
抛弃所有那些全球性的东西。如果您需要在内部闭包中使用app
(例如configure
),只需在那里使用它,它就可用。
在继续之前,请确保您已熟悉闭包,此SO帖子将有所帮助:How do JavaScript closures work?。
如果您想知道如何布局Express应用程序(如文件的位置),请查看此SO帖子:express.js sample apps。
答案 1 :(得分:0)
这个例子帮我组织了很多代码。 node-express-mongoose-demo
我没有看到使用全局变量来帮助你,只需要你需要的模块就好了。
拥有全局变量可能会使维护更加困难,如果其他人必须维护您的代码,则更是如此。拥有全局变量使得很难知道变量是什么以及它在何处被初始化(或何时)。当您的应用程序增长时,很难知道代码的哪些部分依赖于所述变量,因此也难以替换。
除非完全必要,否则应避免使用全球经验法则。