Javascript Node.js:配置和路由在不同的文件中

Javascript Node.js:配置和路由在不同的文件中,javascript,node.js,coffeescript,express,Javascript,Node.js,Coffeescript,Express,我正在启动一个新的Node.js应用程序,这次,我试图正确组织代码,而不是将所有内容都放在同一个文件中 我现在在服务器上只有一个简单的设置。coffee: express = require 'express' app = module.exports = express.createServer() ## CONFIGURATION ## app.configure () -> app.set 'views', __dirname + '/views' app.set 'view

我正在启动一个新的Node.js应用程序,这次,我试图正确组织代码,而不是将所有内容都放在同一个文件中

我现在在
服务器上只有一个简单的设置。coffee

express = require 'express'
app = module.exports = express.createServer()

## CONFIGURATION ##

app.configure () ->
 app.set 'views', __dirname + '/views'
 app.set 'view engine', 'jade'
 app.use express.bodyParser()
 app.use express.logger('dev')
 app.use express.profiler()
 app.use express.methodOverride()
 app.use app.router
 app.use express.static(__dirname + '/public')

app.configure 'development', () ->
 app.use express.errorHandler({dumpExceptions: true, showStack: true})

app.configure 'production', () ->
 app.use express.errorHandler()

app.get '/', (req,res) ->
  res.render 'index'
    title: 'Express'

## SERVER ##
port = process.env.PORT || 3000 

app.listen port, () ->
  console.log "Listening on port" + port
关于这个简单的代码,我有一些问题,我知道所有的答案都取决于开发人员,但我真的想把它做好:

  • server.js
    文件是否应该包含比
    app.listen
    更多的内容?到底应该有什么
  • 难道所有的配置不应该与路由位于不同的文件中吗?运行
    服务器.coffee
    时,如何将
    应用程序删除到其他文件并使其工作
  • 我在Hubot等许多应用程序中看到的
    index.coffee
    究竟应该包含什么

我希望有人能给我一个答案,而不是“视情况而定”。你可以利用
require
,简单地将
app
var作为参数传递给方法。这不是最漂亮的语法,在CoffeeScript中也不是,但你应该明白

routes.js app.js 如果你想更进一步,我会把我的路线分成更小的组,并放在它自己的子文件夹中。(例如:
routes/auth.js
用于登录/注销,
routes/main.js
用于主页/关于/联系等)

routes/index.js
(将以前的
routes.js
重命名为
routes/main.js
,源代码本身保持不变)

有两个类似的问题可以帮助您解决这一问题:

使用
Express.Router
类来表达这一点

帮助组织路由的另一个功能是一个新类,
express.Router
,可用于创建模块化可装载路由处理程序。
路由器
实例是一个完整的中间件和路由系统;因此,它通常被称为“迷你应用程序”

以下示例将路由器创建为模块,在其中加载中间件,定义一些路由,并将其装载到主应用程序的路径上

在应用程序目录中创建名为
birds.js
的路由器文件,包含以下内容:

var express = require('express');
var router = express.Router();

// middleware specific to this router
router.use(function timeLog(req, res, next) {
  console.log('Time: ', Date.now());
  next();
});

// define the home page route
router.get('/', function(req, res) {
  res.send('Birds home page');
});

// define the about route
router.get('/about', function(req, res) {
  res.send('About birds');
});

module.exports = router;
然后,在应用程序中加载路由器模块:

var birds = require('./birds');
app.use('/birds', birds);
该应用程序现在将能够处理对
/birds
/birds/about
的请求,同时调用特定于路由的
timeLog
中间件


谢谢@Dominic这是我一直在寻找的,关于如何制作应用程序架构的建议。expressjs的人应该在他们的页面上有类似的内容。我建议你看看关于express.Router()的示例。它与此非常相似,但它帮助我更加了解这一点。上面的链接已断开。@Nick Pineda:链接已断开。不再有“快速路由器”锚-您只需向下滚动到“快速路由器”。。。或“birds.js”。
// export a function that accepts `app` as a param
module.exports = function (app) {
    require("./main")(app);
    // add new lines for each other module, or use an array with a forEach
};
var express = require('express');
var router = express.Router();

// middleware specific to this router
router.use(function timeLog(req, res, next) {
  console.log('Time: ', Date.now());
  next();
});

// define the home page route
router.get('/', function(req, res) {
  res.send('Birds home page');
});

// define the about route
router.get('/about', function(req, res) {
  res.send('About birds');
});

module.exports = router;
var birds = require('./birds');
app.use('/birds', birds);