2

就像其他人一样,我似乎已经开始使用 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”的教程的帮助和链接将不胜感激。

4

1 回答 1

3

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

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

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

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

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

所以这有点取决于你在做什么。如果您真的想使用 fluent-paradigm 构建您的 API,那么请继续,但请确保您对此保持一致。

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

于 2013-05-11T18:55:05.437 回答