【问题标题】:Should I be chaining methods and functions in node.js and Express?我应该在 node.js 和 Express 中链接方法和函数吗?
【发布时间】:2013-05-06 05:06:35
【问题描述】:

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

【问题讨论】:

  • 只要usegetlisten返回原来的app就可以了。链接与 jQuery 一起工作的原因是因为 jQuery 方法总是(在大多数情况下)返回原始选定元素集合
  • 谢谢@Ian。这是有道理的,链式版本似乎与非链式版本一样好用。我仍然怀疑我见过的许多 node.js/Express 教程和示例都没有以这种方式使用链接。

标签: javascript node.js asynchronous express chaining


【解决方案1】:

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

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2018-05-29
    • 2021-03-27
    • 2019-12-02
    • 2014-11-25
    • 2018-09-14
    • 2017-12-03
    • 2011-05-22
    • 2013-06-07
    • 2012-07-10
    相关资源
    最近更新 更多