组织节点项目的最佳方法是什么

时间:2013-10-17 11:29:17

标签: node.js coffeescript organization

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

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()

有更好的方法来做到这一点。我觉得我已经猜到并做了这件事。我希望一切都超级整洁。而且很快。

2 个答案:

答案 0 :(得分:0)

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

在继续之前,请确保您已熟悉闭包,此SO帖子将有所帮助:How do JavaScript closures work?

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

答案 1 :(得分:0)

这个例子帮我组织了很多代码。 node-express-mongoose-demo

我没有看到使用全局变量来帮助你,只需要你需要的模块就好了。

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

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