Node.js:不同文件中的配置和路由
Posted
技术标签:
【中文标题】Node.js:不同文件中的配置和路由【英文标题】:Node.js: Configuration and routes in a different file 【发布时间】:2012-01-16 08:41:38 【问题描述】:我正在启动一个新的 Node.js 应用程序,这一次,我试图正确地组织代码,而不是将所有内容都放在同一个文件中。
我现在在server.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
多吗?究竟应该有什么?
不应该所有配置都在与路由不同的文件中吗?如何在运行server.coffee
时将app.get
删除到其他文件并使其正常工作?
我在 Hubot 等许多应用程序中看到的 index.coffee
到底应该包含什么?
我希望有人能给我一个“取决于”以外的答案。
【问题讨论】:
【参考方案1】:您可以利用require
,并将app
var 作为参数传递给方法。它不是最漂亮的语法,在 CoffeeScript 中也不是,但你应该明白。
routes.js
module.exports = function (app)
// set up the routes themselves
app.get("/", function (req, res)
// do stuff
);
;
app.js
require("./routes")(app);
如果你想更进一步,我会将我的路线分成更小的组,并放在它自己的子文件夹中。 (例如:routes/auth.js
用于登录/注销,routes/main.js
用于家庭/关于/联系等)
路由/index.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
;
(将之前的routes.js
重命名为routes/main.js
,源本身保持不变)
【讨论】:
感谢@Dominic,这是我一直在寻找的,关于如何制作应用程序架构的建议。 expressjs 家伙应该在他们的页面上有这样的东西。 我建议您看一下有关 express.Router() expressjs.com/migrating-4.html#express-router 的示例,它与此非常相似,但它帮助我更加了解了这一点。 上面的链接坏了。 @Nick Pineda:链接是expressjs.com/en/guide/migrating-4.html。不再有“#express-router”锚点 - 您只需向下滚动到“express.Router”...或“birds.js”。【参考方案2】:用 express.Router
类表达 4 simplifies 这个。
另一个帮助组织路由的特性是一个新类
express.Router
,您可以使用它来创建模块化的可安装路由处理程序。一个Router
实例是一个完整的中间件和路由系统;因此,它通常被称为“迷你应用”。以下示例将路由器创建为模块,在其中加载中间件,定义一些路由,并将其挂载到主应用程序的路径上。
在app目录下创建一个名为
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
中间件。
【讨论】:
【参考方案3】:有两个类似的问题可以帮助你很多:
How to structure a express.js application?
Nodejs/Expressjs app structure
【讨论】:
以上是关于Node.js:不同文件中的配置和路由的主要内容,如果未能解决你的问题,请参考以下文章