【问题标题】:What's the best way to organize a node project组织节点项目的最佳方式是什么
【发布时间】:2013-10-25 20:54:38
【问题描述】:

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

服务器.咖啡

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

有没有更好的方法来做到这一点。我觉得我只是猜测并编造了这个。我希望一切都超级整洁。速度快。

【问题讨论】:

    标签: node.js coffeescript organization


    【解决方案1】:

    这个例子对我组织代码很有帮助。 node-express-mongoose-demo

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

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

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

    【讨论】:

      【解决方案2】:

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

      在继续之前,请确保您很好地掌握了闭包,这篇 SO 帖子将有所帮助:How do JavaScript closures work?

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-11
        • 1970-01-01
        • 2010-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-03
        相关资源
        最近更新 更多