我应该在node.js和Express中链接方法和函数吗?

时间:2013-05-11 18:35:04

标签: javascript node.js asynchronous express chaining

就像其他人一样,看起来,我已经开始使用node.js和Express框架了。

虽然我对客户端Javascript有相当的信心,当然严重依赖JQuery,但我在使用node.js时非常暴露我对Javascript实际工作方式缺乏正确理解。因此这个问题。

我见过的每一个教程,包括Holowaychuk先生自己的教程,都是这样做的:

var express = require('express'),
    app = express();

app.use(express.methodOverride());
app.use(express.cookieParser());
app.use('/images', express.static(__dirname + '/public/images'));
app.get('/', <do something>);
app.get('/:something', <do something else>)
app.listen(3000);

如果我为客户端Javascript编写类似的内容,我很想引用app对象一次并链接任何函数或方法,从而产生这个:

var express = require('express'),
    app = express();

app.use(express.methodOverride())
   .use(express.cookieParser())
   .use('/images', express.static(__dirname + '/public/images'))
   .get('/', <do something>)
   .get('/:something', <do something else>)
   .listen(3000);

所以我的问题是:这两个在功能上有什么不同吗?我冒着破坏不同步之神的风险吗?

任何帮助和指向教程的链接'只是因为你玩过JQuery并不意味着你对Javascript有任何了解',我将非常感激。

1 个答案:

答案 0 :(得分:1)

Fluent只是构建API的一种方法。实质上,您所做的是返回调用该方法的变量:

app.use = function(){
    // do stuff here
    return this;
};

然后您可以执行以下操作:

app.use().use().use();

这显然只有在函数通常不返回任何内容时才有效。

所以这取决于你正在做什么。如果你真的想用流畅的范例构建你的API,那么请继续,但要确保你的一致性。

如果你不想,那也没关系,你不会破坏任何东西或者让你的代码不那么容易维护,这只是一种风格。 (在jQuery中它运行得特别好,因为几乎没有任何jQuery对象的方法需要返回数据)