【问题标题】:How to use `index.js` in a Node.js when creating an Express service?创建 Express 服务时如何在 Node.js 中使用`index.js`?
【发布时间】:2024-01-07 02:05:01
【问题描述】:

您好,我正在基于this 构建我的 Node.js 项目,如下所示:

    • 产品名称
      • index.js:(包含产品和主要导出的要求)
      • productName.js:包含应用程序逻辑
    • 测试
      • test1.js
      • test2.js ...

现在我有两个问题

  1. index.js 中的逻辑应该是什么?目前我有这个(这是一种很好的做事方式吗?我还可以在 index.js 中包含什么?):

    // index.js
    
    var myServer = require('./myServer.js'); // "product name" = "myServer"
    
    module.exports = {
        run: myServer.listen
    }
    
  2. 我在 module.exports 中调用对象键(当前为“运行”)是否重要?为什么我用$ node index.js执行index.js时服务器总是运行它是如何自动知道运行myServer.listen的?

P.S.:我知道 web 结构自动生成工具,我只是想了解这个建议结构的逻辑原因(在 index.js 中没有任何逻辑的想法)

【问题讨论】:

  • index.js 通常是您的 入口点(IIRC npm init 甚至在 package.json 中将其用作默认值)。这是您导入/需要所有模块的地方,这就是它的唯一功能。您可以根据需要添加逻辑,但仅导入意味着您不必查看它来解决问题。

标签: node.js express structure node-modules


【解决方案1】:

正如您提到的,这是一个 Express 服务,如果它只处理某个应用程序的后端,或者更具体地说,这只是后端应用程序,我建议您将 index.js 的名称更改为 server.js(因此明确说明它会处理所有的服务请求)。

但如果不是,那么即使 index.js 也可以。

现在

1

您所提供的内容绝对没问题,除此之外,您还可以要求所有模块、路由(或您命名的控制器)作为应用程序的入口点。尽量不要在这里放任何逻辑。

2

实际上,服务器运行是因为它执行名为 index.js 的文件中的脚本,脚本显示为 myServer.listen,现在如果您编写了 console.log("Hello World") 并使用了 $node index.js 它会'而是打印了Hello World

Node 只期望并执行 index.js 中的脚本,在您的情况下是启动服务器。

关于为什么不在 index.js 中添加任何其他内容的逻辑,对我来说,我认为足够好的理由是它提供了抽象,因为它是我不希望 index.js 担心诸如要做什么之类的事情的入口点处理这些数据和所有。我相信它应该为设置服务器提供基础。从而在一定程度上遵循单一职责。此外,除非发生一些重大变化,否则我将不必在项目生命周期中触及它,例如我决定从快递换成别的东西。

编辑 为什么要有一个叫run的键

您似乎已经自己回答了(在 cmets 中),您给出或更正确的描述是您将一个对象附加到 module.exports,因为它是一个类似于 JSON 的对象,它应该有一个键(这可能是任何不一定运行的东西,它可能是 hii)。现在,如果您不想传递密钥并仅导出 server.listen 的一件事,那么您可以编写与 module.exports = myServer.listen; 相同的内容,而不是

module.exports = {
   hii: myServer.listen
 } 

请注意,您可以按照您的方式导出更多模块。有关 module.exports 的更多详细信息,请参阅 this 或更好的 google,因为此链接可能随时过期,并且看起来不是一个理想的东西。

【讨论】:

  • 因此,如果执行了 module.exports = {} 中的任何脚本/函数,那么为该对象提供密钥的目的是什么(在我的示例中为“run:”)?
  • 请参考我根据您的评论所做的编辑:)