Node.js require()总是返回undefined?

我正在尝试与Amazon AWS使用Node.js,当我尝试声明一个aws实例时,我一直得到未定义的返回值。 另外当我尝试要求一个普通的模块,如http,terminal也返回undefined。 当我尝试执行我的实际脚本时,会发生这种情况。

terminal片段:

User$ node > var aws=require('aws-sdk') undefined > var web =require('http') undefined 

你所看到的不是require(...)的返回值,只是因为这不是你input的内容。

您正在观察声明的结果, var aws = require('aws-sdk') 。 那个声明,一个赋值的variables声明,有一个“未定义的值”。 如果你检查awsvariables中存储的内容,就会发现它不是未定义的,它包含了require(...)调用返回的模块。

尝试这个:

  • 开始节点
  • 键入var x = 2

你还会看到undefined 。 而且你知道“2”绝对不是“未定义的”。

现在,试试这个:

  • 开始节点
  • 键入require('aws-sdk') (或任何其他模块,如http ;请注意,这只是要求模块,而不是将其分配给任何variables)

您将看到正在REPL中打印的模块。

最后,试试这个:

  • 开始节点
  • typesvar aws = require('aws-sdk')
  • typesaws

这将把awsvariables的值打印到REPL中。 这个值就是require(...)调用返回的值。 你会发现它绝对不是“未定义的”。

这是Node.js在任何平台上的精确预期行为(也就是说,你所观察到的与你在AWS上运行Node的事实完全无关;你可以在你的笔记本电脑上运行它,无论你有什么操作系统, d看到完全相同的行为)。