开始使用类似"const app = require('express')()"的方式启动Express被认为是一种不好的做法吗?

5

标题已经说明了一切。从来没有见过有人使用这种语法。

const app = require('express')()

我喜欢保持主 js 文件的简洁,所有东西都在模块中,因此我只有 15 行代码,包括注释。

谷歌并没有帮助我,在这里也没有找到答案。

使用 require 的同时调用 express 是否是一种不好的做法?

4个回答

11

一般来说,你的代码应该是最简单、最清晰可靠地满足你要求的方式。遵循这些简单指南的任何代码都不会被认为是不良实践。

可能会有其他影响所需的编码风格,例如团队风格指南、文件/模块/项目中已经存在的编码风格以及您可能想要进行测试、调试或重用的某些事情。 但是,由于您没有提及这些影响,我将假设它们在此处不存在。

因此,在考虑第一段的前提下,只要您不需要在本模块的其他地方访问 express 模块,则可以执行以下操作:

const app = require('express')();

事实上,这确实是实现您目标最简单、最清晰的方式,不应被视为一种不良做法 - 事实上应该被看作是一种良好的做法


另一方面,如果你正在做这件事:

const app = require('express')();

....


const mainRouter = require('express').Router();


....

const subRouter = require('express').Router();


....

app.use(require('express').static('public'));

如果你将Express模块加载到自己的变量中,然后在该模块的所有其他地方使用它,这样可以使代码更简单、更少冗余(也许会稍微快一点,因为函数调用较少):

const express = require('express');
const app = express();

....


const mainRouter = express.Router();


....

const subRouter = express.Router();


....

app.use(express.static('public'));

1
接受这个答案,因为它基本上以易于阅读的格式总结了我的问题。谢谢 :) - hymair

1

需要考虑的一点是,express模块提供了其他一些功能,您可能以后会想要使用它们(例如express.static)。在您的情况下,您需要再次require express才能访问它:

app.use(require('express').static());

除此之外,没有任何理由认为这是“不良实践”。这只取决于您打算从模块中利用什么。

1
幸运的是,该模块很可能已被缓存。 - Ryan
1
@RyanMcCullagh 是的,Node 在模块被引用后会缓存它们。但这会使代码变得不必要冗长。 - Marty
我不知道是否因为回答了某个人认为不值得回答的问题,还是我的写作存在合理的问题而被踩。作为一个NodeJS开发中级者,我真的想知道是否存在后者。 - Marty
我也不理解为什么被踩。至于你的建议:这不是问题,因为我已经将这些设置作为一个模块,并在其中设置了视图引擎和静态文件,因此我在该模块中需要express。我想这都与约定俗成有关吧? - hymair
1
同意。下票者应该说明为什么要下票,因此下票是一个机会,可以了解回答需要改进的地方,而不仅仅是毫无机会地反对,并给团体带来反馈和混淆作者。 - jfriend00
@zakachen,这基本上取决于你和你所在的任何团队。对于这种事情,“正确”的方式就是其他团队成员或项目贡献者习惯和舒适的方式。这完全是一个观点问题(这也是我回答问题可能被投票否决的原因)。 - Marty

1
这不是一个坏的实践,而是以下代码的简短版本:
var express = require('express');
var app     = express();

0

简单地说,创建一个标识符以便重复利用并且更好地与读者沟通


关于require()的更多思考

由于require()负责加载和缓存模块,有人认为它应该在应用程序初始化之前放置。我看到许多示例代码都遵循这种风格。但是我认为这确实取决于特定项目中包/代码质量如何得到保证。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接