2014-01-20 71 views
2

我正在学习node/express。我已经购买了几本书,并遵循一些在线指南,我想开始摆弄左右,但我想不出哪里逻辑添加到我的路线。 我使用express命令行工具创建了一个基本应用程序。我现在在我的app.js新来表达,我从哪里开始?

app.get('/', routes.index); 
app.get('/users', user.list); 

我看到玉模板中定义的两条路线,我想我完全有能力通过玉/笔服普通的旧的HTML。但我想添加逻辑,我不知道该怎么做。它是否像php一样工作,因为在我的HTML文件中添加了逻辑,或者我把它放在app.js中。

我一个例子,如何引用变量在玉看到了,但显示页面时我想运行的代码(服务器端,如PHP)。

我引用PHP很多,因为它是我熟悉的语言。

回答

2

一个常见的模式是独立的逻辑变成你从你的呼叫路由功能,可以在不同的文件

把这些
var express = require('express'); 
var app = express(); 
require('http').createServer(app).listen(3000); 
app.use(express.logger()); 
app.use(express.bodyParser()); 
app.use(app.router); 
app.set('views', __dirname + '/templates'); 
app.set('view engine', 'jade'); 

var myLib = require('lib/myLib.js'); 
// myLib will contain: module.exports = { foo:function(req, arg, callback){ ... } }; 

app.get('/', function(req, res){ 
    myLib.foo(req, 'hello', function(err, result){ 
    // this is passed into foo as `callback` and generally is called from foo 
    if(err){ return res.send(500) }; 
    res.send(200, 'Foo was ' + result); 
    }); 
}); 

// edit - ways to structure this with app.render for a jade template 
app.get('/jade1', function(req, res){ 
    myLib.bar(req, res); 
    // it is now myLib.bar's responsibility to send a response with the `res` object, 
    // either with res.end, res.send, res.render, res.redirect or whatever 
}); 

// my preferred way: (i usually try to keep my logic separated from req/res) 
app.get('jade2', function(req, res){ 
    var username = req.body.username; 
    myLib.getUser(username, function(err, result){ 
    if(err){ return res.send(500) }; 
    res.locals.foobar = 'hello world';  
    // res.locals.x is equivalent to passing {x:_} inline to render as below: 
    res.render('jade2', {user: result}); 
    }); 
}); 
+0

你也可以把整个路由功能在一个单独的文件,并要求它从应用程序.js,从而设置你的路线。我认为这是在默认设置明确的行为,我也认为这是证明以及[在快递例子(https://github.com/visionmedia/express/tree/master/examples/route-separation) – Plato

+0

还只需将逻辑直接放入路由就可以了。一些缺点是,如果你想从别的地方调用这个函数,它的可重用性就会降低,并且它会让你的路线变得混乱。 – Plato

+0

你会如何将它与由jade生成的html整合?例如来自快速工具生成的应用的默认索引页面。 顺便说太棒了答案,谢谢。 – xdaxdb