我对使用require()
在ExpressJS中导入包有困惑。 我包括一些软件包,例如nodemailer
,bcryptjs
,即在其内部调用require
。所以,我不得不在require
他们多次在一个单一的路线文件。在NodeJS(ExpressJS)中,'require()'应该在本地还是全局使用?
一位同事建议所有require
语句应该只出现一次,无论是在该路由文件的顶部还是在app.js
文件中。我有点困惑。有人可以建议在中间件内使用require
包装的最佳方式。
示例代码: 假设例如我需要在中间件功能中发送电子邮件。我对这个代码,如下所示:
var nodemailer = require("nodemailer");
var mailTransport = nodemailer.createTransport();
var mailOptions = {
from: constants.mail_sender_email,
to: constants.user_won_recipient_mails,
subject: templateContext.subject,
text: subject + ".\n",
html: results.html
};
每次我需要发送一封电子邮件,我再次使用require('nodemailer')
声明。我是否应该在该路线文件中需要一次,即index.js
或可能在app.js
? 但是,有些情况下,如require('ObjectID')
,这是不经常使用。全球需要这样的软件包也会不错?
感谢。
你同事最有可能是正确的,但是如果你不显示你的代码,我们不能告诉你。 – BetaRide
[从应用程序初始化开始就不需要'模块](https://github.com/alanjames1987/Node.js-Best-Practices#never-require-modules-after-app-initialization) – str
模块被缓存,所以没有通过多次包括某些东西来惩罚性能。 –