新的表达方式,我从哪里开始?

时间:2014-01-20 02:37:30

标签: node.js express

我正在学习node / express。我已经购买了几本书,并且已经关注了一些在线指南,我想开始摆弄,但我无法弄清楚在哪里添加逻辑到我的路线。 我使用快速命令行工具创建了一个基本应用程序。我现在在app.js中定义了两条路线

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

我看到玉模板,我认为我完全有能力通过玉/手写笔提供普通的旧HTML。但我想添加逻辑,我不知道该怎么做。它是否像php一样工作,就像我在jade html文件中添加逻辑一样,或者我是否以某种方式将它放在app.js中。

我在一个例子中看到如何在jade中引用变量,但是我希望在显示页面时运行代码(服务器端,如php)。

我正在引用php,因为它是我熟悉的唯一语言。

1 个答案:

答案 0 :(得分: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});
  });
});