有关启动node.js应用程序的问题

时间:2019-02-23 16:54:43

标签: javascript node.js node-modules

我已经收到一个node.js应用程序,可以放入我负责的生产环境中(我是unix管理员)。主文件(启动应用程序的文件如下):

var module1 = (require('./module1.js')), ls;
var module2 = (require('./module2.js')), rd;
var module3 = (require('./module3.js')), rs;
var module4 = (require('./module4.js')), rd;
var module5 = (require('./module5.js')), rd;
var module6 = (require('./module6.js')), rd;
var module7 = (require('./module7.js')), rd;

出于好奇(我不是javascript / node.js程序员),我试图在Internet上查找语法。我找到的最接近的是 var module = require('./module.js');,但没有包含括号和rd / rs / ls后缀的东西……

将'require ...'放在括号内并添加后缀rd,rs,ls的目的是什么?

一些说明: 我问了一位程序员,他告诉我每个模块都启动一个不同的Web应用程序(使用Express模块​​)。 2.编写此部分的原始程序员不再与公司合作,无法访问,并且没有人希望接触应用程序的这一部分:-(

1 个答案:

答案 0 :(得分:3)

理解语法

在JavaScript中,当您使用var声明变量时,可以一次声明多个以逗号(,)分隔的变量。

例如:

var v1 = "example", v2 = "example2", v3;

v1v2既存在又具有值。 v3存在,但其值未定义。

在您的情况下应用

您的情况是:

var module1 = (require('./module1.js')), ls;

我不知道require('./module1.js')返回什么,但是为了简单起见,假设它包含module.exports = "abc",这意味着require('./module1.js')将返回"abc"

这意味着该行实际上是:

var module1 = "abc", ls;

module1的值为"abc",而ls的值为undefined

现在,您重复一个后缀的事实确实很奇怪,并且似乎没有任何实际用途。它绝对不遵循包含模块的典型模式。它们只是具有undefined值的变量(从提供的代码中显示)。也许它们会在代码库的其他地方使用。

编辑

  

我问了一位程序员,他告诉我每个模块(使用Express模块​​)启动一个不同的Web应用程序

在NodeJS中,默认情况下,每个模块都有一个module.exports对象,它只是一个空对象{}。如果在那些必需的模块内,它没有重新分配或添加到module.exports上,那么require将仅返回一个空对象。

但是,该模块仍在执行,因此该模式(有些人可能将其称为反模式)是副作用模块。如果所需的模块除了会引起副作用(在这种情况下,这将启动Express应用程序,并可能将侦听连接绑定到其他端口)没有作用,但没有API或用途。

作者本来可以写

require('./module1.js');
require('./module2.js');

达到相同的结果。当然,如果没有var关键字,他们就无法同时声明lsrsrd,这可能就是作者写他的方式。在提供的代码中,这些变量的意义或目的仍然不清楚。