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

标签 node.js express structure node-modules

嗨,我正在基于 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

您所放置的内容绝对没问题,除此之外,您可能需要所有模块、路由(或 Controller ,无论您如何命名它们),以将其作为应用程序的入口点。尽量不要在这里放置任何逻辑。

2

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

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

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

编辑 为什么有一个名为 run 的键

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

module.exports = {
   hii: myServer.listen
 } 

请注意,您可以使用您所做的方式导出更多模块。有关 module.exports 的更多详细信息,请参阅 this或者更好地谷歌一下它,因为这个链接可能随时过期,而且似乎不是一个理想的放置方式。

关于node.js - 创建 Express 服务时如何在 Node.js 中使用 `index.js`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48574495/

相关文章:

node.js - 套接字发送到房间适用于除发送者之外的所有套接字

javascript - Puppeteer 从 <dl> 结构中获取元素

node.js - ( Node js)-类型错误: Cannot call method 'getData' of undefined

node.js - Nodejs 在 ZIP 文件流传输期间阻塞并且无法处理下一个请求

c - ClientHello 消息 ssl 中的 ProtocolVersion

c - 将变量定义为结构体

c - 从链表中正确删除元素?指针的内存错误

javascript - 使用下划线 (_) 为未使用的参数添加前缀的原因是什么?

javascript - Node js - 从文本文件中删除字符串

node.js - 如何在 node.js 中使用 Promise 和 express?