don*_*ald 16 javascript node.js coffeescript express
我正在启动一个新的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
Run Code Online (Sandbox Code Playgroud)
我对这个简单的代码有一些疑问,我知道所有的答案都取决于开发人员,但我真的想要做得对:
server.js文件应该超过app.listen?究竟应该是什么?app.get在运行时删除其他文件并使其正常工作server.coffee?index.coffee我在许多像Hubot这样的应用程序中看到的内容?我希望有人可以给我一个答案,而不是"它取决于".
Dom*_*nes 35
您可以利用require并简单地将appvar in作为参数传递给方法.它不是最漂亮的语法,也不是CoffeeScript中的语法,但你应该明白这一点.
module.exports = function (app) {
// set up the routes themselves
app.get("/", function (req, res) {
// do stuff
});
};
Run Code Online (Sandbox Code Playgroud)
require("./routes")(app);
Run Code Online (Sandbox Code Playgroud)
如果你想更进一步,我将我的路线分成更小的组,并在它自己的子文件夹中.(如:routes/auth.js登录/退出,routes/main.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
};
Run Code Online (Sandbox Code Playgroud)
(routes.js从之前重命名为routes/main.js,源本身保持不变)
Express 4 在课堂上简化了这一点express.Router.
帮助组织路由的另一个功能是一个新类,
express.Router可用于创建模块化可安装路由处理程序.一个Router实例是一个完整的中间件和路由系统; 因此,它通常被称为"迷你应用程序".以下示例将路由器创建为模块,在其中加载中间件,定义一些路由,并将其安装在主应用程序的路径上.
创建
birds.jsapp目录中指定的路由器文件,其中包含以下内容:Run Code Online (Sandbox Code Playgroud)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;然后,在应用程序中加载路由器模块:
Run Code Online (Sandbox Code Playgroud)var birds = require('./birds'); app.use('/birds', birds);该应用程序现在能够处理请求
/birds并/birds/about与调用一起timeLog具体的路线中间件.
| 归档时间: |
|
| 查看次数: |
27477 次 |
| 最近记录: |