创建 Express 服务时如何在 Node.js 中使用 `index.js`?

How to use `index.js` in a Node.js when creating an Express service?

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

  • Root
    • product name
      • index.js: (contains requires for the product and the main export)
      • productName.js: contains application logic
    • test
      • 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(当前 "run")中调用对象键有什么关系吗?为什么当我用$ node index.js执行index.js时服务器总是运行 它如何自动知道运行 myServer.listen

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

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

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

现在

1

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

2

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

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

关于为什么不在 index.js 中放入任何其他内容的逻辑,对我来说,我认为足够好的推理是它提供了抽象,因为它是我不希望 index.js 进入的入口点担心诸如如何处理这些数据之类的事情。我相信它应该为设置服务器提供基础。因此在某种程度上遵循单一责任。此外,除非发生一些重大变化,否则我将不必在项目生命周期内触及它,例如我决定从 express 转向其他方式。

编辑 为什么有一个名为 运行

的密钥

你似乎已经自己回答了(在评论中),你正在给出或更恰当的描述是你将一个对象附加到 module.exports 因为它是一个类似于 JSON 的对象它应该有一把钥匙(可以是任何东西,不一定 运行 它可能是 hii)。现在,如果您不想传递密钥并只导出一个 server.listen 的东西,那么您可以写成 module.exports = myServer.listen; 而不是

module.exports = {
   hii: myServer.listen
 } 

请注意,您可以使用您的方式导出更多模块。有关 module.exports 的更多详细信息,请参阅 this 或更好的 google,因为此 link 可能随时过期,并且似乎不是理想的选择。